Grails создает процедуры - PullRequest
0 голосов
/ 16 ноября 2011

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

a) Как я могу создать процедуру в Grails,какое в основном действие всегда выполняется - без связи с каким-либо событием?Скажем, каждый час это действие выполняется.

Я думал о чем-то вроде этого:

while(true){

...
myCodeHere
...
wait 30minutes
}

Будет ли это на самом деле работать?Без слишком большой обработки?И как я могу иметь действие, постоянно работающее, несмотря ни на что.Есть ли конкретный способ сделать это?Спасибо заранее, RR

Ответы [ 2 ]

3 голосов
/ 16 ноября 2011

Обычный способ сделать это в приложении Grails - с помощью плагина планировщика Quartz . Плагин предоставляет простой cron-подобный DSL для планирования заданий. Например, чтобы запускать задание каждые 30 минут, вы можете настроить его следующим образом:

class MyJob  {
    static cronExpression = "0 0/30 * * * ?"

    def execute(){ /* do something useful */ }
}

Если вы хотите все время запускать фоновый поток, взгляните на плагин executor , который предоставляет ExecutorService , правильно завернутый для получения спящего режима.

0 голосов
/ 16 ноября 2011

Избегая кварца и плагинов, вы можете использовать чистый Spring Framework

1) добавить в контейнер

<task:annotation-driven executor="executor" scheduler="scheduler"/>
<task:executor id="executor" pool-size="5"/>
<task:scheduler id="scheduler" pool-size="10"/>

(не забудьте определить пространства задач и имен tx)

2) Создать боб и добавить метод

@Scheduled(fixedDelay=4000)
public void method() {
  // do something every 4 seconds
}

отделка! Для получения дополнительной информации см. пружинный каркас

...