Spring事务的的详细理解,事务嵌套解析,以及事务失效的场景解惑
想要了解Spring的事务嵌套,我们先了解一下Spring的七种事务传播属性各自表示的意思
-
propagation_requierd
:如果当前没有事务,就新建一个事务,如果已存在一个事务中,加入到这个事务中,这是最常见的选择。 -
propagation_supports
:支持当前事务,如果没有当前事务,就以非事务方法执行。 -
propagation_mandatory
:使用当前事务,如果没有当前事务,就抛出异常。 -
propagation_required_new
:新建事务,如果当前存在事务,把当前事务挂起。 -
propagation_not_supported
:以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。 -
propagation_never
:以非事务方式执行操作,如果当前事务存在则抛出异常。 -
propagation_nested
:如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则执行与propagation_required类似的操作
了解了这七种传播属性表示的意思,接下来在说具体的解释
详解Spring的事务传播属性以及在写代码的过程中发生嵌套并发生事务失效的场景
再说这些之前,大家先要清除一个问题,Spring的事务是怎么实现的?
Spring本身是没有事务的,只有数据库才会回有事务,而Spring的事务是借助AOP,通过动态代理的方式,在我们要操作数据库的是时候,实际是Spring通过动态代理进行功能扩展,在我们的代码操作数据库之前通过数据库客户端打开数据库事务,如果代码执行完毕没有异常信息或者是没有Spring要捕获的异常信息时,再通过数据库客户端程