比方说,我在数据库中有一个特定的信息,需要在一天中的特定时间通过电子邮件发送给特定用户。
a)我如何在Grails中创建一个例程,它基本上是一个始终在运行的动作 - 而不与任何事件相关联?让我们说,每个小时都会执行该操作。
我在考虑这样的事情:
while(true){
...
myCodeHere
...
wait 30minutes
}
这实际上有用吗?没有太多的处理?无论如何,我怎么能永久地运行一个动作呢?我有一个特定的方法吗? 提前致谢, RR
答案 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