2010-09-28 2 views
4

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

Thank you. Jay Chandran

+0

FYI, ваша проблема с изменением системного времени, вероятно, такая же, как ошибка в ссылке, которую вы указали в комментарии ниже. Я не уверен в внутренней работе Quartz, но это * возможно * использование таймеров и, следовательно, склонность к той же проблеме. Возможно, кто-то, у кого больше знаний о том, как работает Кварц, может просветить нас. –

ответ

2

Вы не можете запустить класс таймера при запуске Tomcat, поскольку он не будет иметь доступ к вашему приложению Grails со всеми связанными с ним данными, которые ему необходимо выполнить. Вы можете запустить его, когда ваше приложение Grails начинается, хотя, поставив необходимый код в Conf/bootstrap.groovy

+0

Я поставил логику с помощью таймера в Config.groovy. Моя идея - обновить файл каждые 5 минут. Проблема, с которой я столкнулся, заключается в изменении времени сервера, таймер больше не работает, и файл больше не обновляется! http://bugs.sun.com/view_bug.do?bug_id=4290274 Я также использую метод timer.scheduleAtFixedRate. Я думаю, что кварц - лучший вариант. –

5

Если вам нужно больше гибкости, чем просто таймер, вы можете использовать Quartz Plugin и настроить Cron Job:

class MyTimerJob { 
    static triggers = { 
     // cron trigger for every 5 minutes 
     cron name: 'myCronTrigger', cronExpression: '0 */5 * * * ?' 
    } 

    def execute = { 
     // perform task 
    } 
} 

Чтобы начать Quartz на приложении запуска (как сказал Джаред: не на кота запуска), убедитесь, что ваш grails-app/conf/QuartzConfig.groovy имеет следующее:

quartz { 
    autoStartup = true 
} 

autoStartup = true по умолчанию, поэтому вам, вероятно, ничего не нужно будет менять.

Использование этого плагина избавит вас от необходимости самостоятельно обращаться с логикой таймера.

+0

Привет, Я установил плагин Quartz, как вы упомянули, и попытался использовать его. Но используя

cron name: 'myCronTrigger', cronExpression: '0 */5 * * ?' 
в статическом триггере, приложение моего приложения Grails не начиналось вообще. Вместо этого используется
 simple name: 'mySimpleTrigger', startDelay: 60000, repeatInterval: 1000
Затем работа работает. Здесь также я сталкиваюсь с аналогичной проблемой, как Таймер. Если я изменю системную дату, задание кварца не будет срабатывать снова. Я что-то упускаю? –

+0

Что касается первого номера, о котором вы упоминаете, я заметил, что синтаксис cron неверен. Прошу прощения - у меня был неправильный синтаксис в моем примере; Я обновил его. Я не уверен, что это может заставить приложение не запускаться. Трудно узнать, не видя сообщение об ошибке. Для проблемы с изменением системного времени у меня нет хорошего предложения. –

+0

Спасибо за это. В консоли не было сообщений об ошибке, которая была странной! –

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