buz*_*dog 2 grails scheduled-tasks grails-2.0
对于我们的一个应用程序,我们有一个不同的任务,我们希望按计划进行.然而,出于几个不同的原因,我们不想打扰石英.
在grails中,我们如何安排可以定期运行的任务?
经过一段时间的研究,我们得出了这样的结论:
在Groovy源包中,我们创建了一个接口
interface Task{
void executeTask()
}
Run Code Online (Sandbox Code Playgroud)
接下来我们创建了Task:
class SayHelloTask implements Task{
void executeTask(){
println "Hello"
}
}
Run Code Online (Sandbox Code Playgroud)
在resources.groovy文件中我们添加了以下内容:
import package.SayHelloTask
beans = {
sayHelloTask(SayHelloTask){
}
xmlns task: "http://www.springframework.org/schema/task"
task.'scheduled-tasks'{
task.scheduled(ref:'retryEmailTask', method: 'executeTask', cron: '0-59 * * * * *')
}
}
Run Code Online (Sandbox Code Playgroud)
我们采用这种解决方案是因为它减少了Quartz的开销.它与我们在Java项目中的工作方式相匹配.
在处理基于Spring的计划任务时,我更喜欢使用我的服务上的注释.
的grails-app/CONF /弹簧/ resrouces.groovy
beans {
xmlns task: "http://www.springframework.org/schema/task"
task.'annotation-driven'('proxy-target-class': true)
}
Run Code Online (Sandbox Code Playgroud)
然后我的服务:
class MyService {
@Scheduled(cron="*/5 * * * * MON-FRI")
void doSomething() {
...
}
}
Run Code Online (Sandbox Code Playgroud)
无论你如何做到这一点,都要谨慎对待你的Hibernate会话范围.祝好运!
小智 5
根据记录,从 Grails 3.2.10 开始,这可以通过以下方式使用注释来巧妙地实现。
创建一个普通的 Grails 服务:
class ScheduledService {
boolean lazyInit = false // <--- this is important
@Scheduled(fixedRate = 20000L)
def myBusinessMethodForTheJob() {
log.info 'Executing scheduled job...'
}
}
Run Code Online (Sandbox Code Playgroud)
在应用程序中启用调度:
@EnableScheduling
class Application extends GrailsAutoConfiguration {
static void main(String[] args) {
GrailsApp.run(Application, args)
}
}
Run Code Online (Sandbox Code Playgroud)
完毕。
| 归档时间: |
|
| 查看次数: |
3575 次 |
| 最近记录: |