动态定时任务

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值执行


👍 欢迎前往博客主页查看更多内容

👍 如果觉得不错,期待您的点赞、收藏、评论、关注

👍 ​ 如有错误欢迎指正!


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部