在线Cron表达式生成器: https://cron.qqe2.com/
解决:使用异步任务 + 定时任务来完成定时任务不阻塞的功能
定时任务
异步任务
cron表达式特点
特殊字符(,-*/LW#)
,:枚举
(cron=“7,9,23 * * * * ?”):任意时刻的 7,9,23 秒启动这个任务;
-:范围
(cron=“7-20 * * * * ?”):任意时刻的 7-20 秒之间,每秒启动一次
*:任意
指定位置的任意时刻都可以
/:步长
(cron=“7/5 * * * * ?”):第 7 秒启动,每 5 秒一次;
(cron="*/5 * * * * ?"):任意秒启动,每 5 秒一次;
?:(出现在日和周几的位置):为了防止日和周冲突,在周和日上如果要写通配符使用?
(cron="* * * 1 * ?"):每月的 1 号,启动这个任务;
L:(出现在日和周的位置), last:最后一个
(cron="* * * ? * 3L"):每月的最后一个周二
W:Work Day:工作日
(cron="* * * W * ?"):每个月的工作日触发
(cron="* * * LW * ?"):每个月的最后一个工作日触发
#:第几个
(cron="* * * ? * 5#2"):每个月的第 2 个周 4
代码示例:
定时任务配置类
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.annotation.EnableScheduling;
@EnableAsync //开启异步任务
@EnableScheduling //开启定时任务
@Configuration
public class ScheduledConfig {
}
业务执行带代码
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;
@Service
public class SeckillScheduled {
// @Scheduled(cron = "*/5 * * * * ? ")
@Scheduled(cron = "0 0 1/1 * * ? ")
public void uploadSeckillSkuLatest3Days() {
//调用service层方法 定时执行业务代码
}
}