2013-02-19 2 views
1

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

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

ответ

5

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

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

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

new Controller().start() 

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

+0

Да, вызов метода контроллера, такого как в BootStrap.groovy, будет работать. – hsan

+0

На самом деле бизнес-логика находится в классах Java, контроллер просто контролирует их. Проблема в том, что, когда я ставил логику в службу, я получаю странное исключение grails-melody, которое не возникает, когда одна и та же логика находится в классе java. Я не мог найти причину этого, и решил придерживаться Java, поскольку я почти ничего не знаю о Grails или Groovy – svz

Смежные вопросы