Spring 中,创建定时任务除了使用@Scheduled 注解外,还可以使用 SchedulingConfigurer。
@Schedule 注解有一个缺点,其定时的时间不能动态的改变,而基于 SchedulingConfigurer 接口的方式可以做到。SchedulingConfigurer 接口可以实现在@Configuration 类上,同时不要忘了,还需要@EnableScheduling 注解的支持。
/*** 执行定时任务.*/@Overridepublic void configureTasks(ScheduledTaskRegistrar taskRegistrar) {taskRegistrar.addTriggerTask(() -> {System.out.println("=================执行动态定时任务============= ");},triggerContext -> {//获取数据库定时任务拉姆达表达式String cron = scheduledMapper.getCron();Date date = new CronTrigger(cron).nextExecutionTime(triggerContext);System.out.println("===========定时任务执行周期:" + cron + ":" + date);return date;});}
此方法,是在触发运行的时候,刷新定时规则,这种方法的缺点是,刷新规则的时间必须是在某次触发运行的时候。
想要立即生效 参考
spring schedule 实时更新 cron 表达式,并且立即生效。(单机,非分布式调度,无需quartz)_stomfeng的专栏-CSDN博客