选型
在Spring Boot中使用定时任务总共有两种方式:
- scheduled
- quartz
使用哪种方式去实现个人认为只需要考虑如下方面:
- 非常简单的定时任务 -> @Scheduled注解
- 调度较为复杂 -> quartz
- 任务需要非阻塞 -> quartz
- 分布式 -> quartz
好吧, 就是最简单的任务用scheduled, 复杂的上quartz
本文暂时只讲解scheduled, quartz后面看懒不懒再补
scheduled
开启定时任务
我们只需要在启动类上增加@EnableScheduling注解即可
@EnableScheduling
@SpringBootApplication
public class Application {
/**
* main方法
*
* @param args 参数
*/
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
编写定时任务
我们只需要在方法上增加@Scheduled注解即可:
public class Task {
@Scheduled(cron="0/5 * * * * ? ")
public void run() {
// 任务逻辑
}
}
@Scheduled注解中的具体参数可以阅读这篇文档
在这里特别讲解下使用中需要注意的几点:
-
"0/5 * * * * ? ", 是指每五秒中运行一次, 但是从整点开始的, 即每分钟的0/5/10/15...依次执行, 并不是从你启动项目的时候开始
-
要想从项目启动开始, 应使用fixedDelay参数, 如@Scheduled(fixedDelay=5000), 其内容单位为毫秒, 即上次任务执行完毕后5秒启动下一个任务
-
fixedDelayString参数支持SpEL表达式, 单位仍为毫秒, 可以使任务时间可配置, 如@Scheduled(fixedDelayString = "${task.interval}")