1.前言
对于开发人员来说,在做项目的过程中或多或少都会用到定时任务,Java开发一般会用Spring Quartz、xxl-job、Elastic-job来做定时任务调度框架。不论使用哪种框架,定时任务表达式都是必不可少的。
平时配置cron表达式,基本上都是把别人写好的表达式样例复制过来修修改改就好了。当然现在也有许多网站提供了在线生成cron表达式的功能,我们只要按照规则填写就可以轻松的得到cron表达式。但是作为一个合格的开发人员来说,掌握基本的cron表达式原理还是很有必要的。即使定时任务没有按预期去调度执行,也能快速的定位到问题所在。
2.简介
Cron表达式是一个具有时间含义的字符串,字符串以5个空格隔开,分为6个域,格式为X X X X X X
。其中X
是一个域的占位符。单个域有多个取值时,使用半角逗号,
隔开取值。每个域可以是确定的取值,也可以是具有逻辑意义的特殊字符。
3.图示
4.特殊字符
5.实例
6.整合java
@Slf4j
@Service
@EnableScheduling
public class SeckillScheduled {
@Autowired
private SeckillService seckillService;
@Autowired
private RedissonClient redissonClient;
//秒杀商品上架功能的锁
private final String upload_lock = "seckill:upload:lock";
//TODO 保证幂等性问题
// @Scheduled(cron = "*/5 * * * * ? ")
@Scheduled(cron = "0 0 1/1 * * ? ")
public void uploadSeckillSkuLatest3Days() {
//1、重复上架无需处理
log.info("上架秒杀的商品...");
//分布式锁
RLock lock = redissonClient.getLock(upload_lock);
try {
//加锁
lock.lock(10, TimeUnit.SECONDS);
seckillService.uploadSeckillSkuLatest3Days();
} catch (Exception e) {
e.printStackTrace();
} finally {
lock.unlock();
}
}
}