记录spring 定时集合坑

  1. cron 表达式

如果cron 秒不能被60正常 在0s会立即执行

0/1 * * * * ?

2023-03-10 16:07:39
2023-03-10 16:07:40
2023-03-10 16:07:41
2023-03-10 16:07:42
2023-03-10 16:07:43

0/9 * * * * ?

注意第5列 差4s就执行

2023-03-10 16:08:27
2023-03-10 16:08:36
2023-03-10 16:08:45
2023-03-10 16:08:54
2023-03-10 16:09:00
2023-03-10 16:09:09

2. @Scheduled 线程问题定时都是用一个线程

不修改配置情况下所有 定时都是用一个线程

Spring Boot 计划任务中的一个“坑” - Robothy - 博客园

spring.task.scheduling.pool.size=5

  1. ScheduledThreadPoolExecutor 重复执行

先看一段代码

   
 AtomicInteger s_s = new AtomicInteger(0);
 //定一个定时线程
 private  ScheduledThreadPoolExecutor heartPool = new ScheduledThreadPoolExecutor(1);
。。。。

scheduledFuture=heartPool.scheduleAtFixedRate(()->{
            int i = s_s.incrementAndGet();
            if(i==3){
                try {
                    Thread.sleep(10000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
            log.info("11111111111111111111111111");

        },0,2, TimeUnit.SECONDS);
2023-03-10 16:17:55.543  INFO 4276 --- [nio-5050-exec-2] o.s.web.servlet.DispatcherServlet        : Completed initialization in 1 ms
2023-03-10 16:17:55.675  INFO 4276 --- [pool-2-thread-1] c.d.s.sql.controller.UserInfoController  : 11111111111111111111111111
2023-03-10 16:17:57.675  INFO 4276 --- [pool-2-thread-1] c.d.s.sql.controller.UserInfoController  : 11111111111111111111111111
2023-03-10 16:18:09.676  INFO 4276 --- [pool-2-thread-1] c.d.s.sql.controller.UserInfoController  : 11111111111111111111111111
2023-03-10 16:18:09.676  INFO 4276 --- [pool-2-thread-1] c.d.s.sql.controller.UserInfoController  : 11111111111111111111111111
2023-03-10 16:18:09.676  INFO 4276 --- [pool-2-thread-1] c.d.s.sql.controller.UserInfoController  : 11111111111111111111111111
2023-03-10 16:18:09.676  INFO 4276 --- [pool-2-thread-1] c.d.s.sql.controller.UserInfoController  : 11111111111111111111111111
2023-03-10 16:18:09.676  INFO 4276 --- [pool-2-thread-1] c.d.s.sql.controller.UserInfoController  : 11111111111111111111111111
2023-03-10 16:18:09.676  INFO 4276 --- [pool-2-thread-1] c.d.s.sql.controller.UserInfoController  : 11111111111111111111111111
2023-03-10 16:18:11.676  INFO 4276 --- [pool-2-thread-1] c.d.s.sql.controller.UserInfoController  : 11111111111111111111111111
2023-03-10 16:18:13.676  INFO 4276 --- [pool-2-thread-1] c.d.s.sql.controller.UserInfoController  : 11111111111111111111111111

定时任务如果没有延迟 执行2s一次,

但是中间线程延迟一次后,延迟期间数据会被重复执行多次

所以在执行定时时候要注意时间长久延迟会照成定时重复执行,尽量保证在每次延迟时间内执行完成

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值