设为首页 - 加入收藏 ASP站长网(Aspzz.Cn)- 科技、建站、经验、云计算、5G、大数据,站长网!
热搜: 数据 创业者 手机
当前位置: 首页 > 站长学院 > MySql教程 > 正文

Spring事务传播属性有那么难吗?看这一篇就够了(5)

发布时间:2019-10-25 22:43 所属栏目:115 来源:佚名
导读:关于什么是嵌套事务的关系,我们用下面三个例子能够进行演示。 第一种情况:如果查不到数据,则说明在调用者无事务情况下,被调用者会新起一个事务 第二种情况:如果查不到数据,说明外层事务能够影响内层事务 第三

关于什么是嵌套事务的关系,我们用下面三个例子能够进行演示。

  •  第一种情况:如果查不到数据,则说明在调用者无事务情况下,被调用者会新起一个事务
  •  第二种情况:如果查不到数据,说明外层事务能够影响内层事务
  •  第三种情况:如果查到数据,说明内层事务不影响外层事务

接下来我们编写具体的代码

  1. // NESTED传播属性-回滚事务  
  2. @Override  
  3. @Transactional(rollbackFor = Exception.class,propagation = Propagation.NESTED)  
  4. public void testNestedHasException() throws RollbackException {  
  5.     jdbcTemplate.execute("INSERT INTO FOO (BAR) VALUES ('"+Global.NESTED_HAS_EXCEPTION+"')");  
  6.    // TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();  
  7.     throw new RollbackException();  
  8. }  
  9. // NESTED传播属性-不回滚事务  
  10. @Override  
  11. @Transactional(rollbackFor = Exception.class,propagation = Propagation.NESTED)  
  12. public void testNestedNoException() throws RollbackException {  
  13.     jdbcTemplate.execute("INSERT INTO FOO (BAR) VALUES ('"+Global.NESTED_NO_EXCEPTION+"')");  

然后接下来的调用者也会有点区别

  1. @Override  
  2. @Transactional()  
  3. public void hasTransactionalNoException() throws RollbackException {  
  4.     // NESTED传播属性 - 调用者有事务,不抛异常  被调用者有异常  
  5.     jdbcTemplate.execute("INSERT INTO FOO (BAR) VALUES ('"+Global.NESTED_HAS_EXCEPTION_TWO+"')");  
  6.     fooService.testNestedHasException();  

然后执行效果

  1. 2019-10-16 18:01:06.387  INFO 17172 --- [           main] c.e.t.t.TransactionApplication           : 第一种情况 0  
  2. 2019-10-16 18:01:06.389  INFO 17172 --- [           main] c.e.t.t.TransactionApplication           : 第二种情况 0  
  3. 2019-10-16 18:01:06.390  INFO 17172 --- [           main] c.e.t.t.TransactionApplication           : 第三种情况 1 

可以看出来嵌套事务的本质就是外层会影响内层,内层不影响外层。而REQUIRES_NEW则是互不影响。

总结

到现在我们已经全部分析完了七种传播属性,从写这篇文章开始到结束其中也碰到过一些坑,有些是不自己实践一遍是根本不知道的,所以我还是建议读者看完这篇文章以后自己进行实践,演示各种情况,只有这样才能够烂熟于心。

【编辑推荐】

  1. 微服务的数据库设计
  2. 超详细的SQL Server数据库触发器总结
  3. 公司如何选择数据库?DynamoDB、Hadoop和MongoDB 大比拼
  4. 华为云数据库助力锦江都城释放数据价值,驱动业务变革
  5. MySQL实验之不同字符集数据库迁移步骤演示
【责任编辑:庞桂玉 TEL:(010)68476606】
点赞 0

(编辑:ASP站长网)

网友评论
推荐文章
    热点阅读