Springboot 自带有定时任务,但是适用场景:
- 单体架构
- 单机部署
在某些场景下,还是很不错的,Springboot自带的方式有2种
1、通过注解的方式
- 在启动类或者配置类上添加启动定时任务的注解:@EnableScheduling
- 新增一个定时任务类,将其放入spring的容器中:@Component
- 新增一个方法,在方法上面添加定时任务的注解: @Scheduled
@Component
public class MyJob {
@Scheduled(cron = "0/3 * * * * ?")
public void scheduledTaskV1() {
System.out.println("执行定时任务");
}
}
2、实现 SchedulingConfigurer 接口
@Component
@EnableScheduling
public class MyJob2 implements SchedulingConfigurer {
@Override
public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
taskRegistrar.addCronTask(new CronTask(()->{
System.out.println("定时任务2");
},"0/3 * * * * ?"));
}
}
==================================================================================
默认情况下,Springboot的定时任务是单线程去执行的,如果需要多线程执行,则可以进行修改
步骤就2步:
- 在启动类或者配置文件上添加注解 @EnableAsync
- 在方法上添加 @Async
@Scheduled(cron = "0/3 * * * * ?")
@Async
public void scheduledTaskV1() {
System.out.println("执行定时任务");
}
@Override
@Async
public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
taskRegistrar.addCronTask(new CronTask(()->{
System.out.println("定时任务2");
},"0/3 * * * * ?"));
}