项目开发中,经常会遇到定时任务的场景,Spring提供了@Scheduled注解
,方便进行定时任务的开发,要使用@Scheduled
注解,首先需要在启动类添加@EnableScheduling
,启用Spring的计划任务执行功能,这样可以在容器中的任何Spring管理的bean上检测@Scheduled
注解,执行计划任务
关于@Scheduled注解我写了一个简单的demo
只需要把修改注解里面的时间算法就行了
定时任务
@Autowired
private RedisLock redisLock;
@Scheduled(cron = "0 0 */3 * * ?")//定时任务注解
public void reportCurrentTime() {
//生成id
String id = UUID.randomUUID().toString();
try {
//加redis锁,每个定时器有自己的常量参数
boolean flag = redisLock.lock(id, RedisLock.OUTBREAK_LOCK_KEY);
} catch (Exception e) {
e.printStackTrace();
} finally {
//解锁
redisLock.unlock(id, RedisLock.OUTBREAK_LOCK_KEY);
}
}
以下是我总结的几个比较常用的时间算法
每隔5秒执行一次: @Scheduled(cron = "*/5 * * * * ?")
每隔1分钟执行一次: @Scheduled(cron = "0 */1 * * * ?")
每天23点执行一次: @Scheduled(cron = "0 0 23 * * ?")
每天凌晨1点执行一次: @Scheduled(cron = "0 0 1 * * ?")
每月1号凌晨1点执行一次: @Scheduled(cron = "0 0 1 1 * ?")
每月最后一天23点执行一次: @Scheduled(cron = "0 0 23 L * ?")
每周星期天凌晨1点实行一次: @Scheduled(cron = "0 0 1 ? * L")
在26分、29分、33分执行一次: @Scheduled(cron = " 0 26,29,33 * * * ?")
每天的0点、13点、18点、21点都执行一次: @Scheduled(cron = " 0 0 0,13,18,21 * * ?")