LogService 实现代码如下:
@Servicepublic class LogService { @Resource private LogMapper logMapper; @Transactional(propagation = Propagation.REQUIRED) public int saveLog(String content) { // 出现异常 int i = 10 / 0; return logMapper.saveLog(content); }}执行结果:程序报错,两张表中都没有插入任何数据 。
执行流程描述:
REQUIRED_NEW 使用演示REQUIRED_NEW 不支持当前事务 。UserController 实现代码:
- 首先 UserService 中的添加用户方法正常执行完成 。
- LogService 保存日志程序报错,因为使用的是 UserController 中的全局事务,所以整个事务回滚,步骤 1 中的操作也跟着回滚 。
- 所以数据库中没有添加任何数据 。
@RequestMapping("/save")@Transactionalpublic Object save(User user) { // 插入用户操作 userService.save(user); // 插入日志 logService.saveLog("用户插入:" + user.getName()); return true;}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);}
经验总结扩展阅读
- 如何评价小说阴阳刺青师
- 关于2021年来了心情说说短语
- 法拉第的名言
- 普通话考试命题说话三分钟多少字
- 灵尊之子司进小说叫什么
- 十月围城这小说谁写的十万火急
- 心情不好的抖音说说
- 关于乐谱的一个简单的知识
- 厨房吊顶用什么颜色好
- 晚安唯美正能量句子