SSM 学习第四天
Spring 事务管理
具体步骤
案例描述, 银行两个账户, 一个账户向另一个账户转钱, 需要进行事务管理
Spring 事务管理分为三个步骤
- 在业务层接口上使用
@Transactional
开启事务管理1
2
3
4public interface AccountService {
void method(String addAccount, String subAccount, Integer money);
}
- 注解加在接口而不是实现类上, 目的是为了降低耦合
- 可以加在方法上, 也可以加在类上
- 设置事务管理器
在配置类中
1 |
|
- 开启注解式事务管理驱动
在 SpringConfig 配置文件中
1 |
入门案例
- 项目结构源码仓库地址 transaction
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29.
├── pom.xml
├── src
│ └── main
│ ├── java
│ │ └── com
│ │ └── ljguo
│ │ ├── AppTest.java
│ │ ├── config
│ │ │ ├── JdbcConfig.java
│ │ │ ├── MybatisConfig.java
│ │ │ └── SpringConfig.java
│ │ ├── mapper
│ │ │ └── AccountMapper.java
│ │ ├── pojo
│ │ │ └── Account.java
│ │ └── service
│ │ ├── AccountService.java
│ │ └── impl
│ │ └── AccountServiceImpl.java
│ └── resources
│ ├── com
│ │ └── ljguo
│ │ └── mapper
│ │ └── AccountMapper.xml
│ └── jdbc.properties
└── transaction.iml
14 directories, 13 files
事务角色
- 事务管理员: 发起事务方, 在 Spring 中通常指代业务层开启事务的方法
- 事务协调员: 加入事务方, 在 Spring 中通常指代数据层方法, 也可以是业务层方法
每个事务协调员(数据层方法等)的使用就会创建一个事务, 如何加入到事务管理员(发起事务方), 然后变成一个事务, 这样就实现了事务统一管理
事务属性
并不是遇到所有异常事务都会回滚, 只有遇到 Error, 或者运行时异常才会进行事务回滚
这时需要在 @Transactional
加入参数
1 | public interface AccountService { |
通过 rollbackFor
接收参数数组, 然后实现事务回滚
事务传播行为
待补充