spring事务-属性(类型)及传播

介绍

在创建事务之前,已经有一个事务,此时有若干选项指定行为:

  • REQUIRED:如果当前存在事务,则加入该事务;如果当前没有事务,则创建一个新的事务。默认值 。一般增删改使用

  • SUPPORTS:如果当前存在事务,则加入该事务;如果当前没有事务,则以非事务的方式继续运行。

  • MANDATORY:如果当前存在事务,则加入该事务;如果当前没有事务,则抛出异常。

  • REQUIRES_NEW:创建一个新的事务,如果当前存在事务,则把当前事务挂起。

  • NOT_SUPPORTED:以非事务方式运行,如果当前存在事务,则把当前事务挂起。

  • NEVER:以非事务方式运行,如果当前存在事务,则抛出异常。

  • NESTED:如果当前存在事务,则创建一个事务作为当前事务的嵌套事务来运行;如果当前没有事务,则该取值等价于REQUIRED。

一般增删改用 REQUIRED

注解设置

@Transactional(propagation = Propagation.REQUIRED)

xml配置

<tx:advice id="transaction" transaction-manager="transactionManager">
    <tx:attributes>
        <tx:method name="query*" propagation="REQUIRED" read-only="true" />
        <tx:method name="*insert*"  />
        <tx:method name="update*"  />
    </tx:attributes>
</tx:advice>

原文出处:/show_1EF5sipuDU3C.html