wiki
1. 声明
在主启动类上加上 @EnableScheduling
注解,并编写定时任务执行的业务方法
1. 简单固定时间
直接使用固定写死时间的 @Scheduled
注解,有3种方式:
cron
: 固定时间进行处理,执行时间超过间隔时间,会跳过这次任务
fixedRate/fixedRateString
: 单位毫秒,任务执行间隔是两次任务是开始点,如果执行时长超过间隔,那么会在任务执行结束后立刻执行下一次
fixedDelay/fixedDelayString
: 单位毫秒,任务执行间隔是前次任务结束和下次任务开始点
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
|
@Component public class SchedulingTaskBasic {
@Scheduled(cron = "*/5 * * * * ?") private void printNowDate() { System.out.println("简单固定定时任务执行 : "+System.currentTimeMillis()); } }
|
可以使用占位符在配置文件中声明
1
| @Scheduled(fixedDelayString = "${time.fixedDelay}")
|
2. 动态定时任务
实现 SchedulingConfigurer
中 configureTasks
方法,此方法的作用就是根据给定的 ScheduledTaskRegistrar
注册 TaskScheduler
和特定的任务实例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| @Component public class CompleteScheduleConfig implements SchedulingConfigurer {
@Autowired CronMapper cronMapper;
@Override public void configureTasks(ScheduledTaskRegistrar taskRegistrar) { taskRegistrar.addTriggerTask( () -> System.out.println("动态定时任务: " + LocalDateTime.now().toLocalTime()), triggerContext -> { String cron = ...; if (cron!=null) {...} return new CronTrigger(cron).nextExecutionTime(triggerContext); } ); } }
|