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;//此处是开辟了一个新事务
}
}
这种是针对乐观锁的优化,可以保证不会重复,并且不用空跑流程代码再回滚。
8 回答2.6k 阅读
2 回答5.1k 阅读✓ 已解决
5 回答902 阅读
4 回答1.3k 阅读✓ 已解决
4 回答1.2k 阅读✓ 已解决
3 回答2.2k 阅读
1 回答2.6k 阅读✓ 已解决
两个思路供你参考: