scheduleWithFixedRate在grails项目中不起作用
已知scheduleWithFixedRate在grails项目中不起作用,grails,concurrency,cron,java-8,Grails,Concurrency,Cron,Java 8,已知CriticalTask类继承自java.util.TimerTask类 CriticalTask类的run方法内部的代码工作正常。但是,调度不起作用 我不知道这是web.xml配置问题还是其他问题 假定此作业每分钟启动一次 还应告知我使用: 爪哇8 grails 2.4.3 如果您使用的是ScheduledExecutorService,您不需要TimerTask,事实上,使用TimerTask,由于其混乱的结果,可能会适得其反。它可以工作,因为TimerTask实现了Runnable
CriticalTask
类继承自java.util.TimerTask
类
CriticalTask类的run方法内部的代码工作正常。但是,调度不起作用
我不知道这是web.xml配置问题还是其他问题
假定此作业每分钟启动一次
还应告知我使用:
- 爪哇8
- grails 2.4.3
ScheduledExecutorService
,您不需要TimerTask
,事实上,使用TimerTask
,由于其混乱的结果,可能会适得其反。它可以工作,因为TimerTask
实现了Runnable
,但是除了run()
之外的所有其他方法都没有意义
也就是说,cancel()
和scheduledExecutionTime()
只有在与类一起使用TimerTask
时才能工作
该方法返回一个值,其中包含类似的方法,您可以使用这些方法来控制任务。您必须做出决定。您可以将代码更改为使用返回的
ScheduledFuture
的方法而不是TimerTask
,或者将其更改为使用Timer
而不是Executors.newSingleThreadScheduledExecutor()
。我推荐前者,但我不能对新代码提出建议,因为我不知道您的旧代码。您只展示了如何安排任务(不需要更改),而没有展示使用其他方法将要执行的操作。
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
class BootStrap {
def init = { servletContext ->
def sd = Executors.newSingleThreadScheduledExecutor()
sd.scheduleAtFixedRate(new CriticalTask(), 0, 1, TimeUnit.MINUTES)
}
}