## 注解方式
1. 需要申请配置事物管理 (在spring beans配置文件中)
```
```
2. 启用事务注解(在spring beans配置文件中)
```
```
3. 在需要开启事物的方法上添加注解 `@Transactional`
>### Transactional属性
- **PROPAGATION**设置事物的传播行为
当一个事务方法,调用另外一个事务方法的时候。
**需要在被调用的事物是使用PROPAGATION属性**。
(常用的两个`PROPAGATION_REQUIRED`,`PROPAGATION_REQUIRES_NEW`)
1. REQUIRED--支持当前事务,如果当前没有事务,就新建一个事务。这是最常见的选择。
2. REQUIRES_NEW--新建事务,如果当前存在事务,把当前事务挂起。
3. SUPPORTS--支持当前事务,如果当前没有事务,就以非事务方式执行。
4. MANDATORY--支持当前事务,如果当前没有事务,就抛出异常。
NOT_SUPPORTED--以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。
5. NEVER--以非事务方式执行,如果当前存在事务,则抛出异常。
6. NESTED-- 如果有事务在运行,当前的方法就应该在这个事务的嵌套事务内运行,否则就启动一个新的事务,并在它自己的事务内运行。
- `isolation`设置事务的隔离级别 `isolation=Isolation.READ_COMMITTED`最常用
- 默认spring声明式事务对所有异常回滚,也可以去做设置,但是一般不做。
- 只读事务,表示这个事务只读取数据但不更新数据,这样可以帮助数据库引擎优化事务。
使用`readOnly `指定事务是否为只读,由于事务可以在行和表上获得锁,因此长事务会占用资源,对整体性能产生影响。
如果一个事务只读取数据,但是不做修改,数据库引擎可以对这个事务进行优化。
- 超时事务属性,事务在强制回滚之前可以保持多久,这样可以防止长期运行的事务占用资源。`timeout `秒。
## XML文件配置方式(与AOP配合使用)
1. 配置事务管理器(同注解方式)
2. 配置事务属性
```
3. 配置事务切入点
```