Spring 定时任务@Scheduled

1. 定时任务步骤

1. 在SpringBoot 启动类添加 @EnableScheduling

2. 在启动类的定时任务方法添加注解 @Scheduled

定时任务core表达式生成器网站 : quartz/Cron/Crontab表达式在线生成工具-BeJSON.com

2. 案例

每隔10秒在控制台打印当前时间 

@EnableScheduling   // 定时任务注解
@SpringBootApplication
public class SheduledDemoApplication {

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

    // 每隔10秒发送一个请求
    @Scheduled(cron = "0/10 * * * * ?")
    public void say() {
        Date date = new Date();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        System.out.println(sdf.format(date));
    }

}

3. @Scheduled注解参数

3.1 cron

从左到右的顺序值是: 秒分时日月周年

必填 值范围 通配符
0-59 ,-   *   /
0-59 ,-   *   /
0-23 , -   *   /
日(一个月中的第几天) 1-31 ,-   *   /  L  W
1-12 , -   * /
1-7 ,-   *  /  ?  L   #
1970-2099 , -   *  /

corn可以用${ } 获取配置文件的值。而不用在@ Scheduled 中设置具体的。

如@Scheduled(corn = "${sc.value}")

通配符的含义

,】多个值。如在“周”上设置 “1,2,3“ 表示每周一周二周三都会执行。

【-】区间值。如在”周“上设置”1-3“表示每周一至周三都会执行。

【*】所有值。如在 “秒” 上设置 “ * ” 表示每分钟都会执行。

【/】递增触发。如在”秒“上设置“10/10”表示第10秒开始,每隔10执行一次,即10,20,30,40,50,60秒时执行一次。

【?】不指定值。如每天八点执行,在“周”上设置为 “?”, 即“  0 0 8 * * ? ”即可。

【L】即 Last(末尾,最后的意思)的缩写。

如在“日”上设置表示当月的最后一天。

在“周”上设置表示每周的周日执行。

在“周”上前面加数字,如“3L”表示该月最后一个星期三执行。

【W】离指定日期最近的工作日(工作日表示周一至周五)执行。W前面只能接具体数字,不能跟其它的通配符

  • 如在“日”上设置“15W”每个月离15号最近的工作日执行。

假设当月15日是周六,那么会在当月14日(周五)触发。

假设当月15日是周日,那么会在当月16日(下周一)触发。

假设当月15日是工作日(周一至周五),在当天触发。

  • 如在“日”上设置“1W”表示每月1号之后的最近工作日执行。

假设当月1号是周六,那么会在当月的3号(周一)执行。

【#】序号(表示每月的第几个周几)“周”中特有的。

如在“周”中设置“3#2”表示每月的第二周的周三。

如在“周”中设置“7#5”表示每月的第五周的周日,如果该月第五周没有周日则不执行。

3. 2 zone 

表示时区,默认是个字符串。

// 设置上海时区

@Sheduled(zone = "Asia/shanghai")

3.3 fixedDelay 与 fixedDelayString

fixedDelay 表示上次任务结束到下次任务开始的时间间隔。即上次任务结束后,会等待一定时间再执行下一次任务。(long类型)

// 上次任务结束后等待3秒再执行下一次任务

  @Scheduled(fixedDelay = 3000)

fixedDelayString 表示意思同上,但唯一不同的是 fixedDelayString 是字符串类型,可以支持占位符。

// 上次任务结束后等待3秒再执行下一次任务

  @Scheduled(fixedDelayString = "3000")


占位符表示

// 上次任务结束后等待3秒再执行下一次任务; sc.fixedDelayValue 从读取配置文件中的值,可自定义

  @Scheduled(fixedDelayString = "${sc.fixedDelayValue}")

3.4 fixedRate 与 fixedRateString

fixedRate 表示上次任务开始到下次任务开始的时间间隔。不管上次任务又没有执行完(long类型)

// 上次任务开始3秒后执行下次任务
 @Scheduled(fixedRate = 3000)

 fixedRateString表示意思同上,但唯一不同的是 fixedRateString是字符串类型,可以支持占位符。

@Scheduled(fixedRateString= “3000”)


占位符方式

// 上次任务开始后等待3秒再执行下一次任务; sc.fixedDelayValue 从读取配置文件中的值,可自定义

  @Scheduled(fixedRateString= "${sc.fixedDelayValue}")

3.5 initialDelay与initialDelayString

initialDelay 表示首次执行任务前等待多长时间。(long类型)

// 第一次延迟3秒后执行

@Scheduled(initialDelay = 3000)

initialDelayString同上,但唯一不同的是 initialDelayString 是字符串类型,可以支持占位符。

// 第一次延迟3秒后执行

@Scheduled(initialDelayString= "3000")


 占位符方式

// sc.fixedDelayValue 从读取配置文件中的值,可自定义

@Scheduled(initialDelayString= "${sc.fixedDelayValue}")

3.6 CRON_DISABLED

CRON_DISABLED 默认值为 “-”,表示禁用该任务

// 该注解的定时任务方法不执行

@Scheduled(cron = "-")

上一篇:深 度 学 习


下一篇:HTML DOM 简介