3.2 Spring Task串行任务
3.2.1 编写任务类
在Spring boot启动类上添加注解:@EnableScheduling 新建任务测试类TestTask,编写测试方法如下:
[AppleScript] 纯文本查看 复制代码 @Component public class ChooseCourseTask { private static final Logger LOGGER = LoggerFactory.getLogger(ChooseCourseTask.class);
//
@Scheduled(fixedRate = 5000) //上次执行开始时间后5秒执行 //
@Scheduled(fixedDelay = 5000) //上次执行完毕后5秒执行 //
@Scheduled(initialDelay=3000, fixedRate=5000)
//第一次延迟3秒,以后每隔5秒执行一次
@Scheduled(cron="0/3 * * * * *")//每隔3秒执行一次
public void task1(){
LOGGER.info("===============测试定时任务1开始===============");
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
LOGGER.info("===============测试定时任务1结束===============");
}
测试:
1、测试fixedRate和fixedDelay的区别
2、测试串行执行的特点 3.2.2 cron表达式
cron表达式包括6部分:
秒(0~59)
分钟(0~59)
小时(0~23)
月中的天(1~31)
月(1~12)
周中的天
(填写MON,TUE,WED,THU,FRI,SAT,SUN,或数字1~7 1表示MON,依次类推)
特殊字符介绍:
“/”字符表示指定数值的增量
“*”字符表示所有可能的值 “-”字符表示区间范围 "," 字符表示列举
“?”字符仅被用于月中的天和周中的天两个子表达式,表示不指定值
例子:
0/3 * * * * * 每隔3秒执行 0 0/5 * * * * 每隔5分钟执行
0 0 0 * * * 表示每天0点执行 0 0 12 ? * WEN 每周三12点执行 0 15 10 ? * MON-FRI 每月的周一到周五10点 15分执行
0 15 10 ? * MON,FRI 每月的周一和周五10点 15分执行
3.2.3 串行任务测试
参考 task1方法的的定义方法,再定义task2方法,此时共用两个任务方法。
[AppleScript] 纯文本查看 复制代码 @Scheduled(fixedRate = 3000) //上次执行开始时间后5秒执行 public void task2(){
LOGGER.info("===============测试定时任务2开始===============");
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
LOGGER.info("===============测试定时任务2结束===============");
}
通过测试发现,两个任务方法由一个线程串行执行,task1方法执行完成task2再执行。
|