前言
定时发送一些任务,在特定时间执行任务
例如: 定时抢购脚本,定时推送信息等等!
一、定时任务是什么?
定时执行任务,只有电脑不关机就可以在特定的时间去执行相应的代码,例如抢购脚本等
二、使用步骤
1.无需引入springboot自带
只需在启动类加上注解 开启功能即可
package com.example.spingbootswagger;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.annotation.EnableScheduling;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
@EnableScheduling //开启定时功能的注解
@SpringBootApplication
public class SpingbootSwaggerApplication {
public static void main(String[] args) {
SpringApplication.run(SpingbootSwaggerApplication.class, args);
}
}
2.创建配置service类
在配置类上加入:@Service注解
每写一个任务都有加一个 @Scheduled(cron = "") 注解
package com.example.spingbootswagger.service;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;
//TaskScheduler 任务调度程序
@Service
public class tasksService {
// 秒 分 时 天 月 周几~
// 0 * * * * 0-7 每个月的每天每时每分每秒周一到周七都会执行
/**
* 30 15 10 * * ? 每天10点15分30 执行
*
* 30 0/5 10,18 * * ? 每天10时18时每个五分钟执行
* 0 15 10 ? * 1-6 每个月的周一到周六10.15分钟执行一次
*/
@Scheduled(cron = "0/1 * * * * 0-7")
public void hello3(){
System.out.println("每秒打印");
}
@Scheduled(cron = "0/2 * * * * 0-7")
public void hello(){
System.out.println("每隔两秒打印");
}
@Scheduled(cron = "0/3 * * * * 0-7")
public void hello1(){
System.out.println("每个三秒打印");
}
}
3.Cron表达式介绍
Cron表达式是一个具有时间含义的字符串,字符串以5~6个空格隔开,分为6~7个域,格式为X X X X X X X
。其中X
是一个域的占位符。最后一个代表年份的域非必须,可省略。单个域有多个取值时,使用半角逗号,
隔开取值。每个域可以是确定的取值,也可以是具有逻辑意义的特殊字符。每个域最多支持一个前导零。
域取值
下表为Cron表达式中六个域能够取的值以及支持的特殊字符。
域 | 是否必要 | 取值范围 | 特殊字符 |
---|---|---|---|
秒 | 是 | [0,59] | * , - / |
分钟 | 是 | [0,59] | * , - / |
小时 | 是 | [0,23] | * , - / |
日期 | 是 | [1,31] | * , - /?L W |
月份 | 是 | [1,12]或[JAN,DEC] | * , - / |
星期 | 是 | [1,7]或[MON,SUN]。若用[1,7]表达方式,1代表星期一,7代表星期日 | * , - / ? L # |
年 | 否 | [当前年份,2099] | * , - / |
取值示例
以下为Cron表达式的取值示例。
0 15 10 ? * * | 每天上午10:15执行任务 |
0 15 10 * * ? | 每天上午10:15执行任务 |
0 0 12 * * ? | 每天中午12:00执行任务 |
0 0 10,14,16 * * ? | 每天上午10:00点、下午14:00以及下午16:00执行任务 |
0 0/30 9-17 * * ? | 每天上午09:00到下午17:00时间段内每隔半小时执行任务 |
0 * 14 * * ? | 每天下午14:00到下午14:59时间段内每隔1分钟执行任务 |
0 0-5 14 * * ? | 每天下午14:00到下午14:05时间段内每隔1分钟执行任务 |
0 0/5 14 * * ? | 每天下午14:00到下午14:55时间段内每隔5分钟执行任务 |
0 0/5 14,18 * * ? | 每天下午14:00到下午14:55、下午18:00到下午18:55时间段内每隔5分钟执行任务 |
0 0 12 ? * WED | 每个星期三中午12:00执行任务 |
0 15 10 15 * ? | 每月15日上午10:15执行任务 |
0 15 10 L * ? | 每月最后一日上午10:15执行任务 |
0 15 10 ? * 6L | 每月最后一个星期六上午10:15执行任务 |
0 15 10 ? * 6#3 | 每月第三个星期六上午10:15执行任务 |
0 10,44 14 ? 3 WED | 每年3月的每个星期三下午14:10和14:44执行任务 |
0 15 10 ? * * 2022 | 2022年每天上午10:15执行任务 |
0 15 10 ? * * * | 每年每天上午10:15执行任务 |
0 0/5 14,18 * * ? 2022 | 2022年每天下午14:00到下午14:55、下午18:00到下午18:55时间段内每隔5分钟执行任务 |
0 15 10 ? * 6#3 2022,2023 | 2022年至2023年每月第三个星期六上午10:15执行任务 |
0 0/30 9-17 * * ? 2022-2025 | 2022年至2025年每天上午09:00到下午17:30时间段内每隔半小时执行任务 |
0 10,44 14 ? 3 WED 2022/2 | 从2022年开始,每隔两年3月的每个星期三下午14:10和14:44执行任务 |