码遇砖
my_whale
生活可以忙忙碌碌随大流,思想必须偷偷摸摸求上进
展开
-
数据库事务未提交完成又新开了线程跑任务,导致数据重复操作
问题:使用了Redis分布式锁,但是还是出现了并发的问题原因:数据库的事务提交结束晚于新线程的开始执行,代码里事务的提交放在了带有锁的方法的同级service解决:① 循环查询200条数据再做更新时,查询时增加id条件,每个循环的最后一个id作为下一次循环的条件 ② 将涉及到事务的方法抽到另外一个service文件,调用他,即下调一层 ③ 加上@Transactional(propagation = Propagation.REQUIRED, r...原创 2020-11-23 11:13:43 · 1150 阅读 · 1 评论 -
上线遇到问题-Redis分布式锁时效原因
背景:线上需要从业务那边获取运单数据(滚动一条一条发送,mq监听接收数据),我们这边需要将接收到的数据先持久化,然后finally里循环取出200条未做修改的数据传给第三方公司获取运单对应的高速站ETC发票信息问题:finally里的方法加了Redis分布式锁,但是线上发现有两个线程同时间在推送相同数据解决:初次以为是方法锁锁名不一致,导致没有锁住,方法锁是getClass.getName()保存的锁名,so改成了常量,上线,仍发现问题; 第二次认为是,数据库事务的提交还未完...原创 2020-11-20 16:14:23 · 181 阅读 · 0 评论