记录springBoot定时任务@Scheduled遇到的问题

1.新创建的定时类要把@Component注解加上,目的是将定时类加到spring容器管理,否则启动时会报找不到类的错误

2.如果正式环境是多服务环境,切记在定时中添加redis分布式锁,否则会出现业务数据重复的问题;本地可以通过改端口启动多个jar包进行测试

首先注入RedisTemplate,如果引入不进去要将对应maven加到pom中

调用opsForValue().setIfAbsent();使用了分布式锁和过期机制;我这里是把方法重新封装了一下,可以直接调用RedisTemplate对应的方法;

代码中实际处理,我这里设置的50秒自动过期

业务处理完成以后继续判断一下,防止没有删除成功(PS:我这里是封装的方法,在RedisTemplate中都有对应的方法调用)

3.还有一个问题是发布到正式环境定时,业务中有kafka推送代码,正式环境是4台服务,出现同一时间推送四次的问题,服务间启动有时间差,不是同时启动,当时我的定时是这样写的,每隔一分钟执行一次(此时我还没有加redis分布式锁)

当时排查考虑的是,项目不是同一时间启动,为什么定时会同一时间执行

后面是使用了fixedRate,和cron功能一样,但是解决了重复推送的问题,此时也是没有加redis分布式锁,项目启动有时间差

(一分钟执行一次)

总结:多服务使用定时任务要加redis分布式锁,业务场景满足的情况下尽量使用fixedRate相关,相当于双重控制;cron重复推送原因暂未找到

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值