Spring的事物管理分为声明式的事物管理和编程式的事物管理,常用的是声明式的事物管理,有以下几种方式。
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-2.5.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-2.5.xsd">
<!-- Datasource -->
<bean id="myDataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName">
<value>com.ibm.db2.jcc.DB2Driver</value>
</property>
<property name="url">
<value>jdbc:db2://9.186.62.192:50001/DB</value>
</property>
<property name="username">
<value>username</value>
</property>
<property name="password">
<value>password</value>
</property>
</bean>
<!-- transaction manager -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="myDataSource"/>
</bean>
<!------------------------------------------------------------------------------------------------------------------------>
<!-- config 1 -->
<bean id="PageFlowService" class="com.service.impl.PageFlowService">
<property name="pageFlowDAO" ref="PageFlowDAO" />
<property name="flowNodeDAO" ref="FlowNodeDAO" />
</bean>
<bean id="PageFlowProxy" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean" singleton="false">
<!-- -->
<property name="transactionManager" ref="dataSourceTransactionManager" />
<property name="target" ref="PageFlowService" />
<!-- -->
<property name="transactionAttributes">
<props>
<prop key="*">PROPAGATION_REQUIRED</prop>
</props>
</property>
</bean>
<!------------------------------------------------------------------------------------------------------------------------>
<!-- config 2 -->
<bean id="transactionBase" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean" lazy-init="true" abstract="true">
<!-- -->
<property name="transactionManager" ref="transactionManager" />
<!-- -->
<property name="transactionAttributes">
<props>
<prop key="*">PROPAGATION_REQUIRED</prop>
</props>
</property>
</bean>
<bean id="pageFlowServiceTarget" class="com.service.impl.PageFlowService">
<property name="pageFlowDAO" ref="PageFlowDAO" />
<property name="flowNodeDAO" ref="FlowNodeDAO" />
</bean>
<bean id="pageFlowService" parent="transactionBase" >
<property name="target" ref="pageFlowServiceTarget" />
</bean>
<!------------------------------------------------------------------------------------------------------------------------>
<!-- config 3 -->
<bean id="transactionInterceptor" class="org.springframework.transaction.interceptor.TransactionInterceptor">
<property name="transactionManager" ref="transactionManager" />
<!-- -->
<property name="transactionAttributes">
<props>
<prop key="*">PROPAGATION_REQUIRED</prop>
</props>
</property>
</bean>
<bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
<property name="beanNames">
<list>
<value>*Service</value>
</list>
</property>
<property name="interceptorNames">
<list>
<value>transactionInterceptor</value>
</list>
</property>
</bean>
<bean id="PageFlowService" class="com.service.impl.PageFlowService" singleton="false">
<property name="pageFlowDAO" ref="PageFlowDAO" />
<property name="flowNodeDAO" ref="FlowNodeDAO" />
</bean>
<!------------------------------------------------------------------------------------------------------------------------>
<!--config 4 -->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="*" propagation="REQUIRED" />
</tx:attributes>
</tx:advice>
<aop:config>
<aop:advisor pointcut="execution(* com.service..*Service.*(..))" advice-ref="txAdvice"/>
</aop:config>
</beans>