Spring 中transactionAttributes的合理配置
阿新 • • 發佈:2019-01-28
<!--配置事務攔截器 -->
<bean id="txIntercept"
class="org.springframework.transaction.interceptor.TransactionInterceptor">
<property name="transactionManager" ref="txManage" />
<property name="transactionAttributes">
<props>
<prop key="*">PROPAGATION_REQUIRED,readonly, -Exception</prop>
</props>
</property>
<bean id="txIntercept"
class="org.springframework.transaction.interceptor.TransactionInterceptor">
<property name="transactionManager" ref="txManage" />
<property name="transactionAttributes">
<props>
<prop key="*">PROPAGATION_REQUIRED,readonly, -Exception</prop>
</props>
</property>
</bean>
transactionAttributes的屬性的意義:
PROPAGATION_REQUIRED--支援當前事務,如果當前沒有事務,就新建一個事務。這是最常見的選擇。
(適用於處理一個或多個交叉insert,update,delete)
PROPAGATION_SUPPORTS--支援當前事務,如果當前沒有事務,就以非事務方式執行。
(適用於處理一個或多個交叉insert,update,delete,query)
PROPAGATION_MANDATORY--支援當前事務,如果當前沒有事務,就丟擲異常。
(適用於檢測query是否存在insert,update,delete)
PROPAGATION_REQUIRES_NEW--新建事務,如果當前存在事務,把當前事務掛起。
PROPAGATION_NOT_SUPPORTED--以非事務方式執行操作,如果當前存在事務,就把當前事務掛起。
PROPAGATION_NEVER--以非事務方式執行,如果當前存在事務,則丟擲異常。
(適用於全query)
PROPAGATION_NESTED--如果當前存在事務,則在巢狀事務內執行。如果當前沒有事務,則進行與PROPAGATION_REQUIRED類似的操作。