SpringBoot修改Schedule设置动态定时任务
注解形式的Schedule,定时任务的执行时间随项目初始化之后,不能动态更改。
本文实现SchedulingConfigurer重写定时触发规则,一种是通过cronTrigger触发器动态设置cron表达式,一种是通过PeriodicTrigger触发器动态设置执行间隔。
Tips:每一次任务触发,都会重新获取下一次的执行时间,因此修改cron表达式的时间一定需要在下一次触发执行之前,修改才会生效,否则修改无效。下一次执行完成,获取最新cron,更新到触发规则。
启动类
1 | package com.wl.demo; |
配置文件
定时任务执行时间配置文件:task-config.ini:
1 | printTime.cron=0/10 * * * * ? |
定时任务执行类
1 | package com.wl.demo.task; |
修改执行时间
编写一个接口,使得可以通过调用接口动态修改该定时任务的执行时间:
1 | package com.wl.demo.controller; |
测试
启动项目,可以看到任务每10秒执行一次。
访问接口,传入请求参数cron表达式,将定时任务修改为15秒执行一次。
可以看到任务变成了15秒执行一次。
时间间隔方式触发
除了上面的借助cron表达式的方法,还有另一种触发器,区别于CronTrigger触发器,该触发器可随意设置循环间隔时间,不像cron表达式只能定义小于等于间隔59秒。
1 | package com.wl.demo.task; |