Spring事务异常rollback-only深入探究

首先rollback-only出现的原因先简单带过一下吧:在使用了Propagation.REQUIRED的事务传递中,若本层的service捕获了下层service的异常,则本层中的事务也无法提交,在方法结束,事务尝试提交时会报出Transaction rolled back because it has been marked as rollback-only错误。这是因为REQUIRED是同一个事务,具有原子性。当内层的方法出现异常的时候,会标记一个rollback-only,这样外层方法提交的时候,判断rollback-only为true,那么整个事务都不允许提交。参考代码如下:(以下代码全部基于service层方法级别注解,且事务传播机制为REQUIRED)

悲观锁

悲观锁简而言之就是查询的时候就把数据锁上,修改完提交后释放锁。这样如果别的session有事务没提交的话,查询就会处在等待状态。锁一旦释放,这个session争夺到资源后立即上锁。的确暴力而有效啊。