Как заставить Grails выполнять метод контроллера при запуске?

Я разработчик Java и должен работать с устаревшим приложением Grails. У меня есть класс контроллера и несколько классов Java. Контроллер имеет методы для запуска/остановки задач, описанных в классах Java. Я использую ScheduledExecutorService для этого.

Проблема в том, что каждый раз, когда приложение повторно развертывается, мне приходится вызывать http://application/controller/start, чтобы оно инициализировало планировщик. Я хочу, чтобы этот метод controller.start() вызывался один раз при запуске приложения. Как я могу добиться этого или есть лучший способ сделать это?


person svz    schedule 19.02.2013    source источник


Ответы (1)


Я бы предложил поместить этот метод в службу. Вы можете вызвать службу как из контроллера, так и из Bootstrap.groovy после запуска приложения. Вы также можете использовать стандартный @PostConstruct для службы, чтобы запустить процесс.

Ваши бизнес-методы должны находиться в службах, а не в контроллерах.

Если вам действительно нужно использовать контроллер, попробуйте это из Bootstrap.groovy:

new Controller().start()

У меня нет env, чтобы проверить это, но с этим не должно быть проблем.

person droggo    schedule 19.02.2013
comment
Да, такой вызов метода Controller в BootStrap.groovy будет работать. - person hsan; 19.02.2013
comment
На самом деле бизнес-логика находится в классах java, контроллер просто управляет ими. Проблема в том, что когда я помещаю логику в службу, я получаю странное исключение Grails-Melody, которое не возникает, когда та же логика находится в классе java. Я не мог найти причину этого и решил придерживаться Java, так как почти ничего не знаю о Grails или Groovy. - person svz; 19.02.2013