SpringBoot整合SpringTask任务调度框架的使用

定时任务调度框架种类

定时任务调度框架有:

单体架构:(不适合集群架构)

1 Quartz

2 SpringTask(!!!)

微服务集群架构:

3 xxl-job

4 Elastic-job

1.1 注解

采用SpringBoot整合SpringTask不需要额外导包

@EnableScheduling:开启对定时任务的支持
@Scheduled(cron = "*/6 * * * * ?"):执行的方法上添加,标识方法何时被执行

1.2 启动类启用定时任务调度

【第一步】创建auo-task01项目

SpringBoot整合SpringTask任务调度框架的使用_第1张图片

 【第二步】导入坐标

 
     org.springframework.boot
     spring-boot-starter-web

 【第三步】在启动类上面加上@EnableScheduling即可开启定时,当项目中有多个执行任务的时候,只需要开启一次

@SpringBootApplication
@EnableScheduling
public class BosManagementApplication {

    public static void main(String[] args) {
        SpringApplication.run(BosManagementApplication.class, args);
    }
}

1.3 创建定时任务实现类

SpringBoot整合SpringTask任务调度框架的使用_第2张图片

定时任务1

@Component
public class SchedulerTask01 {

    private int count = 0;
    //每六秒钟执行一次
    @Scheduled(cron = "*/6 * * * * ?")
    private void process() {
        System.out.println("定时任务1:" + (count++));
    }
}

 定时任务2

@Component
public class SchedulerTask02 {
   private static final SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm:ss");
    @Scheduled(fixedRate = 6000)
    public void reportCurrentTime() {
        System.out.println("定时任务2:" + dateFormat.format(new Date()));
    }
}

SpringBoot整合SpringTask任务调度框架的使用_第3张图片

 

1.4 参数说明

  • @Scheduled(“*/6 * * * * ?”) :参数可以接受两种定时的设置,

    • 一种是我们常用的cron="*/6 * * * * ?"

    • 一种是 fixedRate = 6000,两种都表示每隔六秒打印一下内容。

  • @Scheduled(fixedRate = 6000) :上一次开始执行时间点之后6秒再执行

  • @Scheduled(fixedDelay = 6000) :上一次执行完毕时间点之后6秒再执行

  • @Scheduled(initialDelay=1000, fixedRate=6000) :第一次延迟1秒后执行,之后按fixedRate的规则每6秒执行一次

1.5 CronTrigger 的使用

SpringBoot整合SpringTask任务调度框架的使用_第4张图片

 这个定时任务表达式代表:

SpringBoot整合SpringTask任务调度框架的使用_第5张图片

一些符号的用法:

SpringBoot整合SpringTask任务调度框架的使用_第6张图片 

调度工作, CronTriggerBean调度器介绍

 一个cron表达式有至少6个(也可能是7个)由空格分隔的时间元素。从左至右,这些元素的定义如下

参数1:秒  0 - 59

参数2:分钟  0-59

参数3:小时  0-23

参数4:月份中的日期  0-30

参数5:月份 0-11或JAN-DEC

参数6:星期中的日期 1-7或SUN-SAT

参数7:年份1970-2099

 每一个元素都可以显式地规定一个值(如6),一个区间(如9-12),一个列表(如9,11,13)或一个通配符(如*)。“月份中的日期”和“星期中的 日期”这两个元素是互斥的,因此应该通过设置一个问号(?)来表明你不想设置的那个字段

【案例】

   0 0 10,14,16 * * ? 每天上午10点,下午2点,4点

   0 0/30 9-17 * * ?   朝九晚五工作时间内每半小时,从0分开始每隔30分钟发送一次

   0 0 12 ? * WED 表示每个星期三中午12点 

  "0 0 12 * * ?" 每天中午12点触发 

  "0 15 10 ? * *" 每天上午10:15触发 

  "0 15 10 * * ?" 每天上午10:15触发 

  "0 15 10 * * ? *" 每天上午10:15触发 

  "0 15 10 * * ? 2005" 2005年的每天上午10:15触发 

 "0 * 14 * * ?" 在每天下午2点到下午2:59期间的每1分钟触发 

 "0 0/55 14 * * ?" 在每天下午2点到下午2:55期间的每5分钟触发 

 "0 0/55 14,18 * * ?" 在每天下午2点到2:55期间和下午6点到6:55期间的每5分钟触发 

 "0 0-5 14 * * ?" 在每天下午2点到下午2:05期间的每1分钟触发 

 "0 10,44 14 ? 3 WED" 每年三月的星期三的下午2:10和2:44触发 

 "0 15 10 ? * MON-FRI" 周一至周五的上午10:15触发 

 "0 15 10 15 * ?" 每月15日上午10:15触发 

 "0 15 10 L * ?" 每月最后一日的上午10:15触发 

 "0 15 10 ? * 6L" 每月的最后一个星期五上午10:15触发 

 "0 15 10 ? * 6L 2002-2005" 2002年至2005年的每月的最后一个星期五上午10:15触发 

 "0 15 10 ? * 6#3" 每月的第三个星期五上午10:15触发 

 

案例:新建一张用户表:id,username,生日

每天8点,给当天生日的同学发送 邮件祝福

你可能感兴趣的:(spring,boot,java,spring)