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重复推送原因暂未找到
本文介绍了如何在Spring容器中正确使用定时类,避免因未添加Redis分布式锁导致的数据重复问题。作者还分享了解决多服务环境下定时任务重复执行的方法,推荐使用fixedRate和cron结合分布式锁来确保一致性。
3070

被折叠的 条评论
为什么被折叠?



