科技网站大全,网站建设浙江公司,网站后台左侧导航折叠效果打不开,企业网站推广的线上渠道有哪些?目录 事务属性-传播行为
propagation 案例
需求
步骤
具体代码
小结 事务属性-传播行为 propagation 事务传播行为#xff1a;指的就是当一个事务方法被另一个事务方法调用时#xff0c;这个事务方法应该如何进行事务控制。即如果事务方法A中调用了事务方法B#xff0c…目录 事务属性-传播行为
propagation 案例
需求
步骤
具体代码
小结 事务属性-传播行为 propagation 事务传播行为指的就是当一个事务方法被另一个事务方法调用时这个事务方法应该如何进行事务控制。即如果事务方法A中调用了事务方法B那么事务方法B是加入A事务方法还是新建一个事务。 事务传播行为描述REQUIRED默认值 如果当前存在事务则加入该事务如果当前没有事务则创建一个新事务。若A事务回滚则B事务也会回滚 SUPPORTS如果当前存在事务则加入该事务如果当前没有事务则以非事务方式执行。MANDATORY如果当前存在事务则加入该事务如果当前没有事务则抛出异常。REQUIRES_NEW创建一个新事务并挂起当前事务如果存在若A事务回滚B事务不受影响继续执行。NOT_SUPPORTED以非事务方式执行操作如果当前存在事务则挂起该事务。NEVER以非事务方式执行操作如果当前存在事务则抛出异常。NESTED如果当前存在事务则在嵌套事务内执行如果当前没有事务则创建一个新事务。 案例 需求 解散部门时无论成功还是失败都要记录操作日志 步骤 解散部门删除部门、删除部门下的员工记录日志到数据库表中 具体代码 A事务 根据部门ID删除部门信息并且删除员工信息 Transactional(rollbackFor Exception.class) // todo 将deleteByID(Integer ID)方法交给Spring事务管理以确保数据的一致性和完整性// todo 指定出现任何异常都回滚事务Overridepublic void deleteByID(Integer id) {try {deptMapper.deleteByID(id);id 1 / 0;empMapper.DeleteByDeptID(id);} finally {// todo 记录操作日志DeptLog deptLog new DeptLog();deptLog.setCreateTime(LocalDateTime.now());deptLog.setDescription(执行了解散部门的操作部门id为 id 的部门已经解散);deptLogService.insert(deptLog);}} B事务 记录删除员工信息的日志 Service
public class DeptLogServiceImpl implements DeptLogService {Autowiredprivate DeptLogMapper deptLogMapper;Transactional(propagation Propagation.REQUIRES_NEW)Overridepublic void insert(DeptLog deptLog) {deptLogMapper.insert(deptLog);}
} 在该接口实现类中添加了 Transactionalb注解将该类注册为一个事务并且设置属性propagation的值不受A事务的影响都会执行并且提交
小结 REQUIRES_NEW当我们不希望事务之间相互影响时可以使用该传播行为。比如下订单前需要记录日志不论订单保存成功与否都需要保证日志记录能够记录重。 REQUIRED 大部分情况下使用该传播行为即可