spring中事务处理原理
利用aop生成代理对象执行带有Transactional事务注解的方法业务逻辑.项目启动过程中会生成代理对象并将Transactional注解中的属性进行解析加载处理.在方法执行过程中如果出现异常,会根据注解配置决定是进入到事务回滚处理还是事务提交处理逻辑中,事务回滚处理逻辑中最终还是基于数据库的事务回滚处理.
异常的分类
案例说明
以自定义异常为例说明一下@Transactional中是否指定rollbackFor=Exception.class的区别未指定rollbackFor属性
1
2
3
4
5
6
7
8
9
10
|
@Transactional
@GetMapping
(
"/addSysMenu"
)
public
void
addSysMenu()
throws
Exception {
// 更新菜单名称(将id为1的菜单名修改为系统管理测试)
int
k = sysMenuDao.updateSysMenu(
1
,
"系统管理测试"
);
System.out.println(k);
// 自定义异常,抛出非运行期异常
throw
new
Exception(
"自定义异常"
);
// 执行结果:程序终止,数据库中菜单id为1的菜单名修改成功.说明事物没有回滚.
}
|
指定rollbackFor属性
1
2
3
4
5
6
7
8
9
10
|
@Transactional
(rollbackFor = Exception.
class
)
@GetMapping
(
|