概述
事务管理:4大隔离级别+7大传播性+ReadOnly配置
4大隔离级别没啥好说的,和Mysql的事务级别一样:RU、RC、RR、序列化,默认隔离级别和数据库的一样
7大传播性:
- PROPAGATION_REQUIRED:有就加入,没有就新建(默认)
- PROPAGATION_SUPPORTS:有就加入,没有就非事务
- PROPAGATION_NOT_SUPPORTED:有就挂起,非事务方式执行
- PROPAGATION_REQUIRES_NEW :独立新建
- PROPAGATION_MANDATORY:上下文必须要有事务
- PROPAGATION_NEVER:上下文必须没有事务
- PROPAGATION_NESTED : 嵌套事务 ,引入savepoint,子事务回滚并不会导致父事务回滚,父事务回滚,则整个事务回滚。
比如一个大的下载任务,子任务如果尝试 电信网络下载失败,并不会导致整个下载失败,会尝试 联通网络下载某资源,所有子任务都下载完成,整个下载事务就提交。但是如果大的下载任务回滚的话,所有的子任务都会回滚
ServiceA {
//事务属性配置为 PROPAGATION_REQUIRED
void methodA() {
try {
ServiceB.methodB();
} catch (SomeException) {
// 执行其他业务, 如 ServiceC.methodC();
}
}
}
ServiceB {
// 事务属性配置为 PROPAGATION_NESTED
void methodB() {
} }
- 设置readOnly属性,可以防止在读取的方法里面,误执行提交的方法,同时可以防止SQL注入
- 事务的回滚也要看Exception的级别,并不是所有的异常都会回滚,可以配置