Spring Boot 学习笔记(十二) 整合 定时任务
- Spring Boot 学习笔记 源码地址
- Spring Boot 学习笔记(一) hello world
- Spring Boot 学习笔记(二) 整合 log4j2
- Spring Boot 学习笔记(三) 整合 MyBatis + Druid
- Spring Boot 学习笔记(四) 整合 Druid 监控
- Spring Boot 学习笔记(五) 整合 静态资源
- Spring Boot 学习笔记(六) 整合 RESTful 参数传递
- Spring Boot 学习笔记(七) 整合 Swagger2
- Spring Boot 学习笔记(八) 整合 Filter
- Spring Boot 学习笔记(九) 整合 多环境配置
- Spring Boot 学习笔记(十) Redis集群搭建
- Spring Boot 学习笔记(十一) 整合 Redis
- Spring Boot 学习笔记(十二) 整合 定时任务
1. 启动配置
在启动类上添加EnableScheduling注解,启用定时任务
1@SpringBootApplication
2@EnableSwagger2
3@ComponentScan({"com.zdran.springboot"})
4@EnableScheduling
5public class SpringbootApplication {
6
7 public static void main(String[] args) {
8 SpringApplication.run(SpringbootApplication.class, args);
9 }
10
11 ... ...
12}
2. 创建定时任务
创建一个简单的定时任务
1@Component
2public class HelloTask {
3 private static int count = 1;
4 private Logger logger = LoggerFactory.getLogger(HelloTask.class);
5
6 @Scheduled(fixedRate = 5000)
7 public void printHello() {
8 logger.info("Hello 定时任务开始。");
9 logger.info("Hello Task! count = {}", count++);
10 logger.info("Hello 定时任务结束。");
11 }
12}
启动项目会看到每隔5000毫秒会执行一下这个方法。
3. Scheduled注解
- @Scheduled(fixedRate = 5000) :上一次开始执行时间点之后5秒再执行
- @Scheduled(fixedDelay = 5000) :上一次执行完毕时间点之后5秒再执行
- @Scheduled(initialDelay=1000, fixedRate=5000) :第一次延迟1秒后执行,之后按fixedRate的规则每5秒执行一次
4. cron 表达式
还可以通过 cron表达式指定执行时间。类似于 @Scheduled(cron=”/5 “)
Cron表达式由7个部分组成,各部分用空格隔开,每个部分的含义如下:
1Seconds Minutes Hours Day-of-Month Month Day-of-Week Year
- Seconds
秒:数字0-59 - Minutes
分:数字0-59 - Hours
时:数字0-23 - Day-of-Month
月中的几号:可以用数字1-31,但要注意一些特别的月份 - Month
月:可以用0-11 或用字符串 “JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV and DEC” 表示 - Day-of-Week
周:数字1-7(1 = 星期日),或用字符串“SUN, MON, TUE, WED, THU, FRI and SAT”
cron中有一些特殊符号:
- “*” :代表整个时间段.
- “/“ :表示每多长时间执行一次
- “0/15” :表示每隔15分钟执行一次,“0”表示为从“0”分开始;
- “3/20” :表示每隔20分钟执行一次,“3”表示从第3分钟开始执行
- “?”:表示每月的某一天,或第几周的某一天
5. 趟过的坑
cron表达式中有一组组比较特殊的字段 Day-of-Month 和 Day-of-Week,
如果你要求每月的几号执行,那么 Day-of-Week 就要用 “?”,
如果你要求每周的周几执行,那么 Day-of-Month 就要用 “?”,
具体是什么原因我也不知道。举个例子:有一个定时,希望每个月的 1号凌晨1点执行,那么cron表达式为0 0 1 1 * * ?
转载请注明出处
本文链接:zdran.com/20181016.ht…