UserService 实现代码:
@Servicepublic class UserService { @Resource private UserMapper userMapper; @Transactional(propagation = Propagation.REQUIRES_NEW) public int save(User user) { System.out.println("执行 save 方法."); return userMapper.save(user); }}LogService 实现代码:
@Servicepublic class LogService { @Resource private LogMapper logMapper; @Transactional(propagation = Propagation.REQUIRES_NEW) public int saveLog(String content) { // 出现异常 int i = 10 / 0; return logMapper.saveLog(content); }}程序执行结果:
User 表中成功添加了一条用户数据,Log 表执行失败 , 没有加入任何数据,但它并没有影响到 UserController 中的事务执行 。通过以上结果可以看出:LogService 中使用的是单独的事务,虽然 LogService 中的事务执行失败了,但并没有影响 UserController 和 UserService 中的事务 。
NESTED 使用演示NESTED 是嵌套事务 。UserController 实现代码如下:
@RequestMapping("/save")@Transactionalpublic Object save(User user) { // 插入用户操作 userService.save(user); return true;}UserService 实现代码如下:
@Transactional(propagation = Propagation.NESTED)public int save(User user) { int result = userMapper.save(user); System.out.println("执行 save 方法."); // 插入日志 logService.saveLog("用户插入:" + user.getName()); return result;}LogService 实现代码如下:
@Transactional(propagation = Propagation.NESTED)public int saveLog(String content) { // 出现异常 int i = 10 / 0; return logMapper.saveLog(content);}最终执行结果,用户表和日志表都没有添加任何数据 。
执行流程描述:
总结Spring 事务传播机制是包含多个事务的方法在相互调用时,事务是如何在这些方法间传播的 。事务的传播级别有 7 个,支持当前事务的:REQUIRED、SUPPORTS、MANDATORY;不支持当前事务的:REQUIRES_NEW、NOT_SUPPORTED、NEVER,以及嵌套事务 NESTED , 其中 REQUIRED 是默认的事务传播级别 。
- UserController 中调用了 UserService 的添加用户方法,UserService 使用 NESTED 循环嵌套事务,并成功执行了添加用户的方法 。
- UserService 中调用了 LogService 的添加方法 , LogService 使用了 NESTED 循环嵌套事务,但在方法执行中出现的异常 , 因此回滚了当前事务 。
- 因为 UserService 使用的是嵌套事务,所以发生回滚的事务是全局的,也就是说 UserService 中的添加用户方法也被回滚了 , 最终执行结果是用户表和日志表都没有添加任何数据 。
是非审之于己 , 毁誉听之于人 , 得失安之于数 。【面试突击87:说一下 Spring 事务传播机制?】
公众号:Java面试真题解析
面试合集:https://gitee.com/mydb/interview
推荐阅读
- 好看的末世召唤流小说 好看的末世召唤小说?
- 有人说:“教育是服务业,教师是服务员”,你怎么看?
- 2021学生中秋假期讲话稿
- 我是哈尔滨兴隆镇的 我们这现在的猪价是五块八 朋友们你们说猪价还能涨吗?
- 适合晚上睡觉发朋友圈的说说 适合晚上睡觉发的朋友圈句子
- 不想恋爱的句子说说心情 恋爱的句子说说心情
- 早上起床适合发朋友圈的说说 早上起床适合发朋友圈的句子
- 海伦凯勒简介100字 海伦凯勒简介
- 魔道祖师:大家最想对羡羡说的一句话是什么?
- 猫一直舔主人怎么回事 猫一直舔自己怎么回事