Spring Task

Spring  Task串行任务

Spring Task默认的串行执行

在Spring boot启动类上添加注解:@EnableScheduling

 1 package com.xuecheng.order.mq;
 2 
 3 import org.slf4j.Logger;
 4 import org.slf4j.LoggerFactory;
 5 import org.springframework.scheduling.annotation.Scheduled;
 6 import org.springframework.stereotype.Component;
 7 
 8 @Component
 9 public class ChooseCourseTask {
10 
11     private static final Logger LOGGER = LoggerFactory.getLogger(ChooseCourseTask.class);
12     @Scheduled(fixedRate = 3000) //上次执行开始时间后3秒执行
13 //    @Scheduled(fixedDelay = 5000) //上次执行完毕后5秒执行
14 //    @Scheduled(initialDelay=3000, fixedRate=5000) //第一次延迟3秒,以后每隔5秒执行一次
15 //    @Scheduled(cron="0/3 * * * * *")//每隔3秒执行一次
16     public void task1(){
17         LOGGER.info("===============测试定时任务1开始===============");
18         try {
19             Thread.sleep(5000);
20         } catch (InterruptedException e) {
21             e.printStackTrace();
22         }
23         LOGGER.info("===============测试定时任务1结束===============");
24     }
25 
26 
27     @Scheduled(fixedRate = 3000) //上次执行开始时间后3秒执行
28     public void task2(){
29         LOGGER.info("===============测试定时任务2开始===============");
30         try {
31             Thread.sleep(5000);
32         } catch (InterruptedException e) {
33             e.printStackTrace();
34         }
35         LOGGER.info("===============测试定时任务2结束===============");
36     }
37 }

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分执行

 

Spring Task并行任务

在项目通常是需要多个不同的任务并行去执行,创建异步任务配置类,需要配置线程池实现多线程调度任务。

将@EnableScheduling添加到此配置类上,SpringBoot启动类上不用再添加@EnableScheduling

 1 import org.springframework.aop.interceptor.AsyncUncaughtExceptionHandler;
 2 import org.springframework.context.annotation.Bean;
 3 import org.springframework.context.annotation.Configuration;
 4 import org.springframework.scheduling.annotation.AsyncConfigurer;
 5 import org.springframework.scheduling.annotation.EnableScheduling;
 6 import org.springframework.scheduling.annotation.SchedulingConfigurer;
 7 import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
 8 import org.springframework.scheduling.config.ScheduledTaskRegistrar;
 9 
10 import java.util.concurrent.Executor;
11 
12 
13 @Configuration
14 @EnableScheduling
15 public class AsyncTaskConfig implements SchedulingConfigurer, AsyncConfigurer {
16 
17     //线程池线程数量
18     private int corePoolSize = 5;
19 
20     @Bean
21     public ThreadPoolTaskScheduler taskScheduler()
22     {
23         ThreadPoolTaskScheduler scheduler = new ThreadPoolTaskScheduler();
24         scheduler.initialize();//初始化线程池
25         scheduler.setPoolSize(corePoolSize);//线程池容量
26         return scheduler;
27     }
28 
29 
30     @Override
31     public Executor getAsyncExecutor() {
32         Executor executor = taskScheduler();
33         return executor;
34     }
35 
36 
37     @Override
38     public AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() {
39         return null;
40     }
41 
42 
43     @Override
44     public void configureTasks(ScheduledTaskRegistrar scheduledTaskRegistrar) {
45         scheduledTaskRegistrar.setTaskScheduler(taskScheduler());
46     }
47 
48 }

 

posted @ 2020-04-13 17:18  佛说-"客"  阅读(142)  评论(0)    收藏  举报