Spring Task 是Spring框架提供的任务调度工具,可以按照约定的时间自动执行某个代码逻辑。
cron作用是定义任务的出发时间
cron表达式分为6或7个区域,依次是:秒->分钟->小时->日->月->周->年(因为年这个区域是可选的) 但是往往周和日这两个位置只能由一个被使用而另外一方使用?,因为几月几日不一定在第几周里面。
另外在这里提供给大家一个cron表达式生成器:https://cron.qqe2.com/
特殊字符介绍:
逗号(,):指定一个值列表,例如使用在月域上1,4,5,7表示1月、4月、5月和7月
横杠(-):指定一个范围,例如在时域上3-6表示3点到6点(即3点、4点、5点、6点)
星号(*):表示这个域上包含所有合法的值。例如,在月份域上使用星号意味着每个月都会触发
斜线(/):表示递增,例如使用在秒域上0/15表示每15秒
问号(?):只能用在日和周域上,但是不能在这两个域上同时使用。表示不指定
井号(#):只能使用在周域上,用于指定月份中的第几周的哪一天,例如6#3,意思是某月的第三个周五 (6=星期五,3意味着月份中的第三周)
L:某域上允许的最后一个值。只能使用在日和周域上。当用在日域上,表示的是在月域上指定的月份的最后一天。用于周域上时,表示周的最后一天,就是星期六
W:W 字符代表着工作日 (星期一到星期五),只能用在日域上,它用来指定离指定日的最近的一个工作日
spring task的使用
1.导入maven坐标
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
2.在启动类上加入注解@EnableScheduling //开启任务调度
3.自定义任务类实现相关业务代码
举例代码:
/**
* 自定义定时任务类
*/
@Component //当前类需要实例化,交给spring管理,所以加@Component
@Slf4j
public class MyTask {
/**
* 定时任务 每隔5秒触发一次
*/
@Scheduled(cron = "0/5 * * * * ?") //指定任务什么时候触发
public void executeTask(){
log.info("定时任务开始执行:{}",new Date());
/**
* 定时任务的一些任务逻辑
*/
}
}