在spring中实现事务有2种方式,有annotation和xml两种形式。接下来分别讲解一下该如何配置:
先定义一个数据源:
<bean id="masterDataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init"
destroy-method="close">
<property name="url" value="${master.jdbc.url}" />
<property name="username" value="${master.jdbc.username}" />
<property name="password" value="${master.jdbc.password}" />
<property name="driverClassName" value="${master.jdbc.driver}" />
<property name="maxActive" value="10" />
<property name="minIdle" value="5" />
</bean>
1.注解形式配置
<!-- 事务管理器 -->
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<!-- 数据源 -->
<property name="dataSource" ref="masterDataSource" />
</bean>
<tx:annotation-driven transaction-manager="transactionManager" />
配置了这行就可以在业务层使用@Transactional(只对public方法有效)注解了。<tx:annotation-driven/>此标签有一个属性proxy-target-class,默认为false,具体是true还是false可以参考http://jinnianshilongnian.iteye.com/blog/1508018有详细的讲解,这里就不多说了。
2.XML形式配置
首先我们需要先定义一个advice
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<!-- 传播行为 -->
<tx:method name="save*" propagation="REQUIRED" />标识为以save开头的方法添加事务
<tx:method name="insert*" propagation="REQUIRED" />
<tx:method name="add*" propagation="REQUIRED" />
<tx:method name="create*" propagation="REQUIRED" />
<tx:method name="delete*" propagation="REQUIRED" />
<tx:method name="update*" propagation="REQUIRED" />
<tx:method name="find*" propagation="SUPPORTS" read-only="true" />
<tx:method name="select*" propagation="SUPPORTS" read-only="true" />
<tx:method name="get*" propagation="SUPPORTS" read-only="true" />
</tx:attributes>
</tx:advice>
然后<aop:config>定义一个切面,在这个切面加上advice
<aop:config>
<aop:advisor advice-ref="txAdvice"
pointcut="execution(* org.shop.service.*.*(..))" /><!-- 包.类.方法(参数)-->
</aop:config>