假设我在数据库中有一个特定信息,需要在一天中的特定时间通过电子邮件发送给特定用户。
a) 我如何在 Grails 中创建一个例程,它基本上是一个始终运行的动作 - 不与任何事件相关联?比方说,该操作每小时运行一次。
我在想这样的事情:
while(true){
...
myCodeHere
...
wait 30minutes
}
这真的会奏效吗?无需过多处理?无论如何,我怎样才能让一个动作永久运行。我有这样做的具体方法吗?提前致谢,RR
在 grails 应用程序中执行此操作的常用方法是使用Quartz 调度程序插件。该插件为调度作业提供了一个简单的类似 cron 的 DSL。例如,要每 30 分钟运行一次作业,您可以像这样配置它:
class MyJob {
static cronExpression = "0 0/30 * * * ?"
def execute(){ /* do something useful */ }
}
如果您想一直运行后台线程,请查看executor 插件,该插件提供了正确包装的ExecutorService以获得休眠会话。
避免使用石英和插件,您可以使用纯 Spring 框架
1)添加到容器
<task:annotation-driven executor="executor" scheduler="scheduler"/>
<task:executor id="executor" pool-size="5"/>
<task:scheduler id="scheduler" pool-size="10"/>
(不要忘记定义任务和 tx 命名空间)
2)创建一些bean并添加方法
@Scheduled(fixedDelay=4000)
public void method() {
// do something every 4 seconds
}
结束!有关更多信息,请参阅弹簧框架