Java多线程重复读取数据库的同一份数据
现有业务:定时任务每两分钟读取20条(状态为未读取)数据库中待处理的数据,将查询到的数据都设置成已读取状态,之后在处理数据。
问题:前后两个任务中读取到了同一份数据,导致数据处理了两次。
求助大佬???
现有业务:定时任务每两分钟读取20条(状态为未读取)数据库中待处理的数据,将查询到的数据都设置成已读取状态,之后在处理数据。
问题:前后两个任务中读取到了同一份数据,导致数据处理了两次。
求助大佬???
正好我也有和你一样的问题,用的spring quartz。给你看下我的方案
伪代码
list =getRecords();
for(l:list){
int num=l.updateBeginFlag; //此处是开辟了一个新事务
if(num<1) continue;
try{
//TODO 逻辑处理
l.updateSuccessFlag;//此处是开辟了一个新事务
}catch(Exception){
l.updateFailFlag;//此处是开辟了一个新事务
}
}
这种是针对乐观锁的优化,可以保证不会重复,并且不用空跑流程代码再回滚。
15 回答8.3k 阅读
7 回答5.2k 阅读
8 回答6.2k 阅读
4 回答4.4k 阅读✓ 已解决
4 回答4k 阅读
3 回答3.9k 阅读✓ 已解决
1 回答2.8k 阅读✓ 已解决
两个思路供你参考: