Cesium 学习笔记(11)---Web后端进阶 spring事务管理
技术栈: Cesium@1.99 + Vue2
本系列将用「实用干货 + 完整源码」的形式,带你循序渐进掌握三维 GIS 核心技能,持续探索Cesium的高级功能,相关源码全部免费公开,请关注微信公众号。
关注【Hello summer】,开启GIS学习
获取系统、实用的 GIS 干货
【本篇将介绍spring事务管理】
事务:一组操作的集合,一个不可分割的单位,这些操作要么同时成功,要么同时失败。
开启事务(一组操作开始前,开启事务):start transaction /begin;提交事务(这组操作全部成功后,提交事务):commit;回滚事务(中间任何一个操作出现异常,回滚事务):rollback;
1spring事务管理
@Transactional 注解 可以作用在方法、接口、类上;作用在哪 那个域就交给spring事务管理
一般只放在执行多个增删改的方法上
注解:@Transactional位置:业务(service)层的方法上、类上、接口上作用:将当前方法交给 Spring 进行事务管理方法执行前:开启事务成功执行完毕:提交事务出现异常:回滚事务
@Transactional@Overridepublic void delete(Integer id) { //1. 删除部门 deptMapper.delete(id); int i = 1/0; //模拟抛出异常 //2. 根据部门id,删除部门下的员工信息 empMapper.deleteByDeptId(id);}
2 事务进阶
2.1 @rollbackFor
@rollbackFor注解 可以让所有异常都回滚事务属性 - 回滚(rollbackFor)
默认回滚规则:仅当出现 RuntimeException 时,事务才会回滚。rollbackFor 作用:指定出现特定异常类型时,触发事务回滚。
代码示例:@Transactional(rollbackFor = Exception.class)@Overridepublic void delete(Integer id) throws Exception { deptMapper.deleteById(id); // 删除部门 if(true){ throw new Exception("出错啦啦..."); // 抛出异常 } empMapper.deleteByDeptId(id); // 删除部门下的员工}
2.2 @propagation
@propagation注解 用来配置事务传播行为(当一个事务方法被另一个事务方法调用时,这个事务方法应如何进行事务控制。)
Spring 事务传播行为(REQUIRED)示例代码结构:方法 a() 标注 @Transactional(默认传播行为为 REQUIRED)方法 b() 显式指定传播行为:@Transactional(propagation = Propagation.REQUIRED)方法 a() 中调用了 userService.b()传播行为逻辑(REQUIRED):方法 b() 会加入方法 a() 已开启的事务(因为 REQUIRED 是 “需要事务,有则加入,无则创建”),二者共用同一个事务。