动态定时任务
SpringBoot定时任务
在SpringBoot中使用定时任务一般是启动类增加@EnableScheduling注解开始定时任务,在方法上增加@Scheduled(cron = "0 0 * * * ?")注解启动定时任务,但是这种方式如果想要改变定时任务的时间就只能修改代码才行
本文讲解如何通过接口修改cron表达式来实现动态定时任务
增加开启定时任务注解
启动类或配置类增加@EnableScheduling注解开启定时任务这一步是一定要有的
编写定时任务service
开始编写定时任务service,该service需要实现SchedulingConfigurer为并重写configureTasks方法
@Service
@Slf4j
public class ScheduledTaskService implements SchedulingConfigurer {// 初始cron值,@Setter为Lombok注解,以便于controller修改cron的值@Setterprivate String cron = "0/10 * * * * ?";@Overridepublic void configureTasks(ScheduledTaskRegistrar taskRegistrar) {taskRegistrar.addTriggerTask(() -> {// 定时任务执行内容log.info("任务执行");}, new Trigger() {@Overridepublic Date nextExecutionTime(TriggerContext triggerContext) {// 使用CronTrigger触发器,可动态修改cron表达式来操作循环规则CronTrigger cronTrigger = new CronTrigger(cron);Date nextExecutionTime = cronTrigger.nextExecutionTime(triggerContext);return nextExecutionTime;}});}
}
编写定时任务Controller
@Slf4j
@RestController
@RequestMapping("/scheduled_task")
public class ScheduledTaskController {@Autowiredprivate ScheduledTaskService scheduledTaskService;@GetMapping("/updateCron")public String updateCron(String cron) {log.info("new cron :{}", cron);scheduledTaskService.setCron(cron);return "ok";}
}
执行结果
[INFO XX 11:30:30.030 XX.service.ScheduledTaskService lambda$configureTasks$0 31 poolScheduler1]:任务执行
[INFO XX 11:30:40.040 XX.service.ScheduledTaskService lambda$configureTasks$0 31 poolScheduler1]:任务执行
[INFO XX 11:30:50.050 XX.service.ScheduledTaskService lambda$configureTasks$0 31 poolScheduler2]:任务执行
[INFO XX 11:30:57.057 XX.ScheduledTaskController http-nio-8829-exec-3]: new cron :0/5 * * * * ?
[INFO XX 11:31:00.000 XX.service.ScheduledTaskService lambda$configureTasks$0 31 poolScheduler1]:任务执行
[INFO XX 11:31:05.005 XX.service.ScheduledTaskService lambda$configureTasks$0 31 poolScheduler3]:任务执行
[INFO XX 11:31:10.010 XX.service.ScheduledTaskService lambda$configureTasks$0 31 poolScheduler2]:任务执行
可以看到,初始是按照每10秒执行一次定时任务,在调用接口后,每5秒执行一次定时任务
需要注意,在调用完接口后不会马上按照新的cron执行,而是先将上一个定时任务执行完才会按新的cron值执行
👍 欢迎前往博客主页查看更多内容
👍 如果觉得不错,期待您的点赞、收藏、评论、关注
👍 如有错误欢迎指正!
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
