0

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

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

我在想这样的事情:

while(true){

...
myCodeHere
...
wait 30minutes
}

这真的会奏效吗?无需过多处理?无论如何,我怎样才能让一个动作永久运行。我有这样做的具体方法吗?提前致谢,RR

4

2 回答 2

3

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

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

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

如果您想一直运行后台线程,请查看executor 插件,该插件提供了正确包装的ExecutorService以获得休眠会话。

于 2011-11-15T22:20:15.327 回答
0

避免使用石英和插件,您可以使用纯 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
}

结束!有关更多信息,请参阅弹簧框架

于 2011-11-16T08:04:35.943 回答