@Transactional
public void updateWeiXinMember( WeiXinMember weiXinMember,WxMemberPointsAddRecord body) {
//加锁
RLock lock = RedissonConfiguration.getWeixinMemberPointsLock(weiXinMember.getCode());
lock.lock();
try{
//重新从数据查询一遍
weiXinMember=weiXinMemberRepository.findOne(weiXinMember.getId());
this.updateWeiXinMemberPoints(weiXinMember,body);
// this.updateWeiXinMemberCardLevel(weiXinMember,body);
}catch ( Exception e){
log.error("异常",e);
}finally {
lock.unlock();
}
}
多线程 调用 controller 类, controller service 中某个片段方法是上图 , 因为方法上 加了 @Transacational 注解 导致 10个线程请求 丢一半 ,导致数据 丢失 。
解决方案 ,去除 @Transactional 或者 在 controller 方法开始 加锁 方法结束 解锁