Spring Task 动态修改任务执行计划cron

来源:互联网 发布:linux vncserver 配置 编辑:程序博客网 时间:2024/06/06 00:26

Spring Task 能够在不重启服务的情况下,动态修改批量任务执行时间。

原理:

Spring Task目前仅支持TriggerContext上修改下次执行时间(批量任务执行后回调SchedulingConfigurer.configureTasks,让用户可以重新设置Trigger,从而动态修改下次执行时间)),这种方法的弊端就是“执行时间不能实时生效”。为此,看了下task文档,感觉若要实现实时生效功能,必须代码里手工启动/停止Spring task任务。

Demo如下:

首先,xml里不需要配置springTask相关的executor和scheduler。其次,在代码里自定义scheduler和taskRegistrar(SpringTask启动的类)。最后,开个线程,模拟动态修改cron表达式的接口。


输出如下:(35min没有执行原task)

INFO  27-11 14:34:10,476 - Initializing ExecutorService 
INFO  27-11 14:34:10,484 - nextExecutionTime: 0 35 14 * * ?
修改cron为: 0 36 14 * * ?
INFO  27-11 14:34:20,487 - Initializing ExecutorService 
INFO  27-11 14:34:20,488 - nextExecutionTime: 0 36 14 * * ?
INFO  27-11 14:36:00,001 - dynamicCronTask is running...
INFO  27-11 14:36:00,001 - nextExecutionTime: 0 36 14 * * ?

阅读全文
0 0
原创粉丝点击