Grails创建例程

时间:2011-11-15 22:09:56

标签: grails routines

比方说,我在数据库中有一个特定的信息,需要在一天中的特定时间通过电子邮件发送给特定用户。

a)我如何在Grails中创建一个例程,它基本上是一个始终在运行的动作 - 而不与任何事件相关联?让我们说,每个小时都会执行该操作。

我在考虑这样的事情:

while(true){

...
myCodeHere
...
wait 30minutes
}

这实际上有用吗?没有太多的处理?无论如何,我怎么能永久地运行一个动作呢?我有一个特定的方法吗? 提前致谢, RR

2 个答案:

答案 0 :(得分:3)

在grails应用中执行此操作的常用方法是使用Quartz scheduler plugin。该插件提供了一个简单的类似cron的DSL用于调度作业。例如,要每30分钟运行一次作业,您可以这样配置:

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

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

如果您想一直运行后台线程,请查看executor plugin,其中ExecutorService正确包装以获得休眠会话。

答案 1 :(得分:0)

避免使用石英和插件,您可以使用纯Spring Framework

1)添加到容器

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

(不要忘记定义task和tx​​名称空间)

2)创建一些bean并添加方法

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

光洁度! 有关详细信息,请参阅spring framework