Spring在TransactionDefinition接口中规定了7种类型的事务传播行为,它们规定了事务方法和事务方法发生嵌套调用时事务如何进行传播:
最常用的一种:
PROPAGATION_REQUIRED |
如果当前没有事务,就新建一个事务,如果已经存在一个事务中,加入到这个事务中。这是最常见的选择。 |
TransactionProxyFactoryBean用继承简化配置
<!-- 定义事务管理器- 数据源的事务管理对象-->
<bean id="transactionManagerFbth"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource">
<ref local="dataSource.FBCM" />
</property>
</bean>
<!-- 配置事务模板,模板bean被设置成abstract bean,保证不会被初始化-->
<bean id="baseProxy"
abstract="true"
class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<!-- 为事务模板注入事务管理器-->
<property name="transactionManager">
<ref bean="transactionManagerFbth" />
</property>
<!-- 设置事务属性-->
<property name="transactionAttributes">
<props>
<prop key="save*">PROPAGATION_REQUIRED,-Throwable</prop>
<prop key="remove*">PROPAGATION_REQUIRED,-Throwable</prop>
<prop key="merge">PROPAGATION_REQUIRED,-Throwable</prop>
<prop key="update">PROPAGATION_REQUIRED,-Throwable</prop>
<prop key="do*">PROPAGATION_REQUIRED,-Throwable</prop>
</props>
</property>
</bean>
<!-- 实际的事务代理bean-->
<bean id="testServer"
parent="baseProxy">
<property name="target">
<!-- 采用嵌套bean配置目标bean -->
<bean class="com.nstc.fbth.server.impl.TestServerImpl"
parent="baseServer" />
</property>
</bean>