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

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

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

被挪用者,只是将@Transactional 注解中的propagation 属性改换为了Propagation.SUPPORTS

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

挪用者和上面的例子挪用一样,我们直接查察执行结果

  1. 2019-10-16 13:50:27.738  INFO 12174 --- [           main] c.e.t.t.TransactionApplication           : 第一种环境 1  
  2. 2019-10-16 13:50:27.741  INFO 12174 --- [           main] c.e.t.t.TransactionApplication           : 第二种环境 0 

我们看到了在第一种环境下查到了数据,声名在第一种环境下被挪用者是没有事宜的。此时我们应该就领略了这句话 支持当前事宜,假如没有就不以事宜的方法运行。

PROPAGATION_MANDATORY

依然是这两个例子举办演示

  •  第一种环境:由于挪用者没有事宜,以是此撒播属性下应该是抛非常的
  •  第二种环境:被挪用者的事宜和挪用者事宜是同样的

接下来是被挪用者的代码例子

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

挪用者和上面的例子挪用一样,我们直接查察执行结果

  1. 2019-10-16 13:58:39.178 ERROR 12317 --- [           main] c.e.t.t.TransactionApplication           : org.springframework.transaction.IllegalTransactionStateException: No existing transaction found for transaction marked with propagation 'mandatory' 
  2. 2019-10-16 13:58:39.276  INFO 12317 --- [           main] c.e.t.t.TransactionApplication           : 第一种环境 0 
  3. 2019-10-16 13:58:39.281  INFO 12317 --- [           main] c.e.t.t.TransactionApplication           : 第二种环境 0 

我们发明和我们展望一样,声名被挪用者是不会本身新建事宜的,此时我们应该就领略了这句话支持当前事宜,假如当前没事宜就抛非常。

PROPAGATION_REQUIRES_NEW

(编辑:湖南网)

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

热点阅读