- 位置:业务(service)层的方法上、类上、接口上
- 作用:将当前方法交给spring进行事务管理,方法执行前,开启事务;成功执行完毕,提交事务;出现异常,回滚事务
- 注解:@Transactional,有两个属性
- rollbaackFor属性:用于控制出现何种异常类型时回滚事务。默认情况下,只有出现RuntimeException才会回滚异常。
- propagation:指的就是当一个事务方法被另一个事务方法调用时,这个事务方法应该如何进行事务控制。
| 属性值 | 核心逻辑(是否需要事务) | 已有事务时的行为 | 无事务时的行为 | 典型场景 |
|---|---|---|---|---|
| REQUIRED | 需要(默认) | 加入已有事务 | 新建事务 | 普通业务方法 |
| REQUIRES_NEW | 需要(独立) | 挂起原有事务,新建事务 | 新建事务 | 独立日志、异步操作 |
| SUPPORTS | 可选 | 加入已有事务 | 非事务执行 | 非核心查询方法 |
| NOT_SUPPORTED | 不需要 | 挂起原有事务,非事务执行 | 非事务执行 | 无状态的只读操作 |
| MANDATORY | 必须有 | 加入已有事务 | 抛异常 | 强依赖上层事务的方法 |
| NEVER | 必须无 | 抛异常 | 非事务执行 | 严格禁止事务的操作 |
常用REQUIRED和 REQUIRES_NEW
配置事务日志:
#开启事务管理日志
logging:
level:
org.springframework.jdbc.support.JdbcTransaction Managger: debug