org.springframework.dao.CannotAcquireLockException异常分析

本文探讨了Spring框架中因事务嵌套导致的死锁问题。具体分析了在一个service调用另一个service,且两者对同一表进行操作时,如何由于操作相同数据而引发死锁。提出了在方法前加入@Transactional(propagation=Propagation.SUPPORTS)的解决方案,并强调了在数据有强关联性时,避免使用此传播级别以防止脏数据产生。

 

经过网上资料查询,原因为:Spring 事务嵌套造成死锁。

该异常为一个service中调用了另一个service,两个service对同一表进行操作,同时操作了相同的数据,造成事务嵌套,从而死锁。

解决办法:
在当前方法前加入@Transactional(propagation=Propagation.SUPPORTS)
注意,如果业务中有操作了相同的数据,而且数据前后有很重要的关联性,强烈建议两个service分开调用,这时无论如何也不能使用@Transactional(propagation=Propagation.SUPPORTS),否则会导致数据成为脏数据,影响数据的正确性

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值