项目开发中,经常会遇到定时任务的场景,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 * * ?")