加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

Spring事宜撒播属性有那么难吗?看这一篇就够了

发布时间:2019-10-29 22:16:53 所属栏目:编程 来源:佚名
导读:笔者文笔功力尚浅,若有欠妥,请慷慨指出,一定谢谢不尽 进修对象要知行合一,假如只是知原理论而没实践过,那么把握的也不会出格踏实,预计过几天就会健忘,接下来我们一路实践来进修Spring事宜的撒播属性。 撒播属性 撒播属性界说的是当一个事宜要领遇到

此撒播属性下,无论挪用者是否有事宜,被挪用者城市新建一个事宜

  •  第一种环境:挪用者无事宜,被挪用者会新建事宜,以是查不到数据
  •  第二种环境:挪用者有事宜,被挪用者会新建一个事宜,以是挪用者抛非常影响不到被挪用者,以是能查到数据

接下来我们演示代码。

被挪用者

  1. // REQUIRES_NEW撒播属性-被挪用者有非常抛出  
  2. @Override  
  3. @Transactional(rollbackFor = Exception.class,propagation = Propagation.REQUIRES_NEW)  
  4. public void testRequiresNewHasException() throws RollbackException {  
  5.     jdbcTemplate.execute("INSERT INTO FOO (BAR) VALUES ('"+Global.REQUIRES_NEW_HAS_EXCEPTION+"')");  
  6.     throw new RollbackException(); 
  7. }  
  8. // REQUIRES_NEW撒播属性-被挪用者无非常抛出  
  9. @Override  
  10. @Transactional(rollbackFor = Exception.class,propagation = Propagation.REQUIRES_NEW)  
  11. public void testRequiresNewNoException() throws RollbackException {  
  12.     jdbcTemplate.execute("INSERT INTO FOO (BAR) VALUES ('"+Global.REQUIRES_NEW_NO_EXCEPTION+"')");  

挪用者的例子和上面的沟通,我们直接来看执行环境

  1. 2019-10-16 16:29:20.296  INFO 15553 --- [           main] c.e.t.t.TransactionApplication           : 第一种环境 0  
  2. 2019-10-16 16:29:20.298  INFO 15553 --- [           main] c.e.t.t.TransactionApplication           : 第二种环境 1 

我们发明和我们的推论是一样的,声名挪用者的事宜和被挪用者的事宜完全无关。此时我们应该就领略这句话了无论当前是否有事宜,城市新起一个事宜。

PROPAGATION_NOT_SUPPORTED

无论挪用者是否有事宜,被挪用者都不以事宜的要领运行

同样是这两个例子

  •  第一种环境:被挪用者都不会有事宜,那么在抛非常之后就能查到响应的数据
  •  第二种环境:在挪用者有事宜的环境下,被挪用者也会在无事宜情形下运行,以是我们依然能查到数据

接下来验证我们的揣摩

  1. // NOT_SUPPORTED撒播属性-被挪用者有非常抛出  
  2. @Override  
  3. @Transactional(rollbackFor = Exception.class,propagation = Propagation.NOT_SUPPORTED) 
  4. public void testNotSupportHasException() throws RollbackException {  
  5.     jdbcTemplate.execute("INSERT INTO FOO (BAR) VALUES ('"+Global.NOT_SUPPORTS_HAS_EXCEPTION+"')");  
  6.     throw new RollbackException();  
  7. }  
  8. // NOT_SUPPORTED撒播属性-被挪用者无非常抛出  
  9. @Override  
  10. @Transactional(rollbackFor = Exception.class,propagation = Propagation.NOT_SUPPORTED)  
  11. public void testNotSupportNoException() throws RollbackException {  
  12.     jdbcTemplate.execute("INSERT INTO FOO (BAR) VALUES ('"+Global.NOT_SUPPORTS_NO_EXCEPTION+"')");  

然后查察执行功效

  1. 2019-10-16 16:38:35.065  INFO 15739 --- [           main] c.e.t.t.TransactionApplication           : 第一种环境 1  
  2. 2019-10-16 16:38:35.067  INFO 15739 --- [           main] c.e.t.t.TransactionApplication           : 第二种环境 1 

我们可以看到在最后两种环境都查到了数据,按照演示结果应该可以领略这句话了,不支持事宜,假如当前存在事宜,就将此事宜挂起不以事宜方法运行。

PROPAGATION_NEVER

挪用者有事宜,被挪用者就会抛出非常

这个就不演示,信托各人看到这里应该城市大白在第一种环境下我们是可以或许查到数据的。在第二种环境下因为挪用者带着事宜,以是会抛非常。

PROPAGATION_NESTED

此撒播属性下,被挪用者的事宜是挪用者的事宜的子集。

我们重点说一下NESTED的撒播属性的特征

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读