A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

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再执行。

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马