Spring Transaction属性之Propagation

配置文件如下:

<!-- 事务通知 -->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="save*" propagation="REQUIRED" />
<tx:method name="saveOrUpdate*" propagation="REQUIRES_NEW" />
<tx:method name="delete*" propagation="REQUIRED" />
<tx:method name="update*" propagation="REQUIRED" />
<tx:method name="upload*" propagation="REQUIRED" />
<tx:method name="merge*" propagation="REQUIRED" />
<tx:method name="refresh*" propagation="REQUIRED" />

<tx:method name="*Save" propagation="REQUIRED" />
<tx:method name="SaveOrUpdate*" propagation="REQUIRES_NEW" />
<tx:method name="*Delete" propagation="REQUIRED" />
<tx:method name="*Update" propagation="REQUIRED" />
<tx:method name="*Merge" propagation="REQUIRED" />
<tx:method name="Refresh*" propagation="REQUIRED" />
<tx:method name="*" read-only="true" propagation="NOT_SUPPORTED" />
</tx:attributes>
</tx:advice>

<aop:config>
<aop:pointcut id="txManger" expression="execution (* com.sc.service..*.*(..))" />
<aop:advisor advice-ref="txAdvice" pointcut-ref="txManger" />
</aop:config>

propagation属性有以下几个值:

MANDATORY:必须在有transaction状态下执行,如果当前没有transaction,则抛出异常IllegalTransactionStateException。

NESTED:如果没有已定义的Transaction,当前方法新开一个Transaction并在该Transaction中运行。如果存在已定义的Transaction,当前方法在嵌套事务(Nested       Transaction)中运行 — 嵌套事务中可以定义储存点,因此可以独立于外部的Transaction而进行rollback。

NEVER:在无transaction状态下执行;如果当前已有transaction,则抛出异常IllegalTransactionStateException。

NOT_SUPPORTED:在无transaction状态下执行;如果当前已有transaction,则将当前transaction挂起。

REQUIRED(默认值):在有transaction状态下执行;如当前没有transaction,则创建新的transaction。

REQUIRES_NEW:创建新的transaction并执行;如果当前已有transaction,则将当前transaction挂起。

SUPPORTS:如当前有transaction,则在transaction状态下执行;如果当前没有transaction,在无transaction状态下执行。

原文地址:https://www.cnblogs.com/zhncnblogs/p/6645666.html