Spring支持两种类型的事务管理:
- 编程式事务管理:这意味你通过编程的方式管理事务,给你带来极大的灵活性,但是难维护。(不常用)
- 声明式事务管理:这意味着你可以将业务代码和事务管理分离,你只需用注解和XML配置来管理事务。(常用)
基于XML的声明式事务管理:
<!--不是事务的包,他的作用是将Spring提供的事务通过切面的形式添加到代码中-->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.9.9</version>
</dependency>
(1)配置事务管理器
常见的事务管理器:JDBC事务管理器、Hibernate事务管理器、JTA分布式事务管理器
可以理解为增强类,在核心业务基础上增加的功能;
<!-- 将SpringJDBC事务管理器添加到Spring容器中 -->
<bean id="transactionManager"class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
(2)配置事务属性
<!--设置事务的属性-->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<!--
name:需要添加方法的方法名称,建议使用通配符表达式 *
isolation:数据库的默认隔离级别,默认是 default
propagation:事务的传播特性,默认:REQUIRED
read-only:只读,针对查询操作
rollback-for:默认情况下对RuntimeException、Error进行回滚,主要解决的
是自定义的异常。配置异常时需要写