目录
- Spring事务管理
- 1.事务管理级别
- 2.事务传播机制
- 3.声明式事务管理
- 3.1基于XML方式的配置
- 3.2 基于注解方式的配置
Spring事务管理
1.事务管理级别
Spring的事务隔离级别有四个:READ_UNCOMMITTED、READ_COMMITTED、REPEATABLE_READ和SERIALIZABLE。
- READ_UNCOMMITTED:允许一个事务读取到另一个事务未提交的数据
- READ_COMMITTED:一个事务只能读取到已经提交后的数据
- REPEATABLE_READ:一个事务可以多次从数据库读取某条记录,而且多次读取的那条记录都是一致的,除非事务本身发生改变
- SERIALIZABLE:不允许读取、修改
2.事务传播机制
spring事务的传播机制有七种:REQUIRED、REQUIRES_NEW、NESTED、SUPPORTS、NOT_SUPPORTED、MANDATORY和NEVER。
- REQUIRED:如果上层有事务则加入该事务,没有就创建新事务
- SUPPORTS:如果上层有事务则加入该事务,没有就以非事务方式执行
- REQUIRES_NEW:如果上层有事务则挂起当前事务,没有就创建新事务
- NOT_SUPPORTED:如果上层有事务则挂起当前事务,没有就以非事务方式执行
- NEVER:如果上层有事务则抛出异常,没有就以非事务方式执行
- MANDATORY:如果上层有事务则加入该事务,没有就抛出异常
- NESTED:如果上层有事务则嵌套该事务执行,没有就创建新事务
3.声明式事务管理
3.1基于XML方式的配置
3.1.1 将Spring提供的事务管理配置交给Spring容器
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
3.1.2 通过Spring jdbc提供的tx标签,声明事务管理策略
- 头文件中添加tx的约束条件和命名空间
xmlns:tx="http://www.springframework.org/schema/tx"
http://www.springframework.org/schema/tx
https://www.springframework.org/schema/tx/spring-tx.xsd">
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="insert*" isolation="REPEATABLE_READ" propagation="REQUIRED"/>
<tx:method name="select*" isolation="REPEATABLE_READ" propagation="SUPPORTS"/>
</tx:attributes>
</tx:advice>
3.1.3 将事务管理策略以AOP配置应用于service操作方法
<aop:config>
<aop:pointcut id="crud" expression="execution(* com.gyh.service.*.*(..))"/>
<aop:advisor advice-ref="txAdvice" pointcut-ref="crud"/>
</aop:config>
3.2 基于注解方式的配置
3.2.1 配置事务管理类并交给Spring容器
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
3.2.2 声明使用注解方式配置
<tx:annotation-driven transaction-manager="transactionManager"/>
3.2.3 在需要Spring进行事务管理的方法上添加注解
public List<User> listUsers() {
return userDao.selectUser();
}