背景
Spring 中,创建定时任务除了使用@Scheduled 注解外,还可以使用 SchedulingConfigurer。
@Scheduled 注解有一个缺点,其定时的时间不能动态的改变,而基于 SchedulingConfigurer 接口的方式可以做到。SchedulingConfigurer 接口可以实现在@Configuration 类上,同时不要忘了,还需要@EnableScheduling 注解的支持。
基于@Scheduled注解的实现方式
代码示例
1 2 3 4 5 6 7 8
| @Component @EnableScheduling public class TimeScheduled { @Scheduled(cron = "${scheduled.cron}") public void run() { } }
|
在启动类必须加上@EnableScheduling 开启定时任务
代码示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| @Component @Data public class TimeSchedulingConfigurer implements SchedulingConfigurer{ private String cron = "* 0/1 * * * ?"; @Override public void configureTasks(ScheduledTaskRegistrar taskRegistrar) { taskRegistrar.addCronTask(new Runnable() { @Override public void run() { } }, cron); } }
|
设置项目启动后,初始化 定时任务执行时间
代码示例
1 2 3 4 5 6 7 8 9 10 11 12 13
| @Component @Order(value = 1) public class TimeStartController implements ApplicationRunner { @Autowired private TimeSchedulingConfigurer job; @Override public void run(ApplicationArguments args) throws Exception { job.setCron("* 0/5 * * * ?"); } }
|
作者简介
雷先森o