2011-02-09 4 views
4

Я обучения grails, и я хотел бы включить повторяющуюся задачу, которая срабатывает каждые пять секунд, пока мое приложение работает, и должно иметь доступ к моим объектам домена и тому подобное. Каков правильный способ достичь этого в Грайле?Где разместить повторяющуюся задачу в приложении Grails?

Я подумал, что начинаю Timer в BootStrap.groovy, но это будет утилизировано и уничтожит таймер.

ответ

9

Я никогда не использовал его, но Grails Quartz plugin должен позволить вам делать то, что вы хотите.

+0

Выглядит хорошо, спасибо. –

+1

Плагин Quartz - правильный путь. Делает жизнь намного проще. – JeffSea

+0

Я использую его, это правильный инструмент, в котором вы нуждаетесь. –

2

Кварц (http://grails.org/plugin/quartz) позволяет вам определять повторяющиеся задачи во многом так же, как задача CRON будет выполняться на одном сервере.

Вы можете установить его в своем проекте так:

grails install-plugin quartz 

После его установки, вы можете создать новую работу с:

grails create-job 

Тогда вы можете запланировать его следующим образом:

class MyJob { 
    static triggers = { 
    simple name: 'mySimpleTrigger', startDelay: 60000, repeatInterval: 1000 
    } 
    def group = "MyGroup" 
    def execute(){ 
    print "Job run!" 
    } 
} 

Если вы предпочитаете форматирование CRON, вы можете запланировать запуск с помощью аналогичного формата:

static triggers = { 
    cron name: 'myTrigger', cronExpression: "0 0 6 * * ?" 
    } 

Однако, так как приложение Grails может быть развернуто на нескольких серверах (QA, постановка, развертывание, балансировки нагрузки ...) кварцевая плагин позволяет конкретный процесс запуска независимо от того, какой сервер он развернут на.

Одна вещь, на которую следует обратить внимание, это синхронизация серверных часов, иначе вы можете столкнуться с какой-то странной функциональностью (особенно, если несколько серверов используют одну и ту же базу данных).

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