1.ScheduledExecutorService 实现定时任务的代码示例如下:
- 开启定时任务只需要在 Spring Boot 的启动类上声明 @EnableScheduling 即可,实现代码如下:
@SpringBootApplication
@EnableScheduling // 开启定时任务
public class DemoApplication {
// do someing
}
- 添加定时任务
@Slf4j
@Component // 把此类托管给 Spring,不能省略
public class Main implements ApplicationRunner {
@Resource
private TaskService taskService; //定时任务
@Override
public void run(ApplicationArguments args) {
//定时任务线程池
ScheduledExecutorService scheduledExecutorService = Executors.newScheduledThreadPool(10);
// 第二个参数为首次执行的延时时间,第三个参数为定时执行的间隔时间,第四个参数为时间单位
//延时0秒,每三秒执行一次
scheduledExecutorService.scheduleAtFixedRate(taskService, 0, 3, TimeUnit.SECONDS);
}
}
- 定时任务业务逻辑:
@Slf4j
@Service
public class TaskService implements Runnable{
@Override
public void run() {
// 定时任务业务逻辑
System.out.println(LocalDateTime.now() +"taskService run!!");
}
}
程序执行结果如下:
2021-05-25T08:48:40.490taskService run!!
2021-05-25T08:48:43.483taskService run!!
2021-05-25T08:48:46.478taskService run!!
2021-05-25T08:48:49.481taskService run!!
2.Spring Task
- 开启定时任务
自动开启
- 添加定时任务
@Slf4j
@Component
public class Main{
@Resource
private TaskService taskService; //定时任务
@Scheduled(cron = "0/5 * * * * ?") // cron 表达式,每5秒执行一次
public void doTask(){
this.taskService.run();
}
}
- 执行结果如下:
2021-05-25T08:58:20.404taskService run!!
2021-05-25T08:58:26.505taskService run!!
2021-05-25T08:58:30.011taskService run!!
2021-05-25T08:58:35.770taskService run!!
注意:定时任务是自动触发的无需手动干预,也就是说 Spring Boot 启动后会自动加载并执行定时任务。