介绍
Spring支持多种事务管理,常用的有:
- AOP配置事务
- 注解配置事务
注解配置事务
在service需要事务的方法上声明: @Transactional 注解
目前 及 未来主流方式
使用简单,但需要手动加上注解,否则spring不会管理事务
哪些异常会引起回滚
默认是 RuntimeException 运行时异常才会引发 回滚
如果想 发生异常时就回滚,改成下面方式:
@Transactional(rollbackFor = Exception.class)
AOP配置事务
一般多用于 xml配置文件,是传统的配置方法
配置较复杂,一旦配置成功,能够匹配切入点表达式的方法,将由spring管理事务
不再需要增加额外的代码
例子
<!-- 注册数据源 C3P0 -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" >
<property name="driverClass" value="${jdbc.driverClass}"></property>
<property name="jdbcUrl" value="${jdbc.url}"></property>
<property name="user" value="${jdbc.username}"></property>
<property name="password" value="${jdbc.password}"></property>
</bean>
<!-- 事务管理器 -->
<bean id="tracnsactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"></property>
</bean>
<tx:advice id="txAdvice" transaction-manager="tracnsactionManager">
<tx:attributes>
<!-- 为连接点指定事务属性 -->
<tx:method name="save*" isolation="DEFAULT" propagation="REQUIRED" rollback-for="Exception"/>
<tx:method name="update*" isolation="DEFAULT" propagation="REQUIRED" rollback-for="Exception"/>
<tx:method name="delete*" isolation="DEFAULT" propagation="REQUIRED" rollback-for="Exception"/>
</tx:attributes>
</tx:advice>
<aop:config>
<!-- 切入点配置 -->
<aop:pointcut expression="execution(* *..service.*.*(..))" id="point"/>
<aop:advisor advice-ref="txAdvice" pointcut-ref="point"/>
</aop:config>