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

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

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

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

笔者文笔功力尚浅,若有欠妥,请慷慨指出,一定谢谢不尽

进修对象要知行合一,假如只是知原理论而没实践过,那么把握的也不会出格踏实,预计过几天就会健忘,接下来我们一路实践来进修Spring事宜的撒播属性。

撒播属性

撒播属性界说的是当一个事宜要领遇到另一个事宜要领时的处理赏罚举动,一共有七种举动,界说如下

着实只看观念的话已经很直截了当了声名白每个撒播性的浸染,此时我们再用详细的例子演示一下每个撒播性属性下的举动。

此次演示我们行使的是H2数据库,这个数据库是浸染在内存内里的,以是对付我们演示事宜结果来嗣魅正好,无需我们在举办其他的设置了,我们新建一个表。将下面语句放在schema.sql文件内里即可,SpringBoot措施在启动的时辰就会自动为我们在内存内里成立这样的一个表。

  1. CREATE TABLE FOO (ID INT IDENTITY, BAR VARCHAR(64)); 

演示之前我们会界说两个类FooService和BarService。我们行使BarService 内里的要领举办挪用FooService 中的要领。

情形筹备

在举办事宜演示之前,着实可以分为以下几种环境,按照分列组合,我们可以得出以下八种环境

  •  挪用者:有无事宜
  •  挪用者:是否有非常
  •  被挪用者:有无事宜**(这个是通过撒播属性举办节制的)**以是并不在分列组合中
  •  被挪用者:是否有非常

非常类

个中的RollbackException是我们本身界说的一个非常类

  1. @Service  
  2. public class BarServiceImpl implements BarService{  
  3.     @Autowired  
  4.     private FooService fooService; 
  5.     // PROPAGATION_REQUIRED演示 无事宜  
  6.     @Override  
  7.     public void testRequiredNoTransactional() throws RollbackException {  
  8.         fooService.testRequiredTransactional();  
  9.     }  

挪用者

在BarService中界说两个要领,一个是带着事宜的,一个是不带事宜的

  1. // 有事宜  
  2. @Override  
  3. @Transactional(rollbackFor = Exception.class)  
  4. public void hasTransactional() throws RollbackException {  
  5. }  
  6. // 无事宜  
  7. @Override  
  8. public void noTransactional() throws RollbackException {  

接下来我们就按照俄上面界说的八种环境举办事宜撒播属性的进修。

PROPAGATION_REQUIRED

在此撒播属性下,被挪用方是否新建事宜取决去挪用者是否带着事宜。

想要相识这个撒播属性的特征,着实我们演示上面八种环境的两个例子就够了

  •  第一种环境我们在被挪用者抛出非常的环境下,假如查询不到插入的数据,那么就声名被挪用者在挪用者没有事宜的环境下本身新建了事宜。
  •  第二种环境我们在挪用者抛出非常的环境下,假如查询不到插入的数据,那么就声名被挪用者在挪用者有事宜的环境下就插手当前事宜了。

我们先来看一下被挪用者的类的要领规子。

  1. @Service  
  2. public class FooServiceImpl implements FooService {  
  3.     @Autowired  
  4.     private JdbcTemplate jdbcTemplate;    
  5.     // REQUIRED撒播属性-被挪用者有非常抛出  
  6.     @Override  
  7.     @Transactional(rollbackFor = Exception.class,propagation = Propagation.REQUIRED)  
  8.     public void testRequiredHasException() throws RollbackException {  
  9.         jdbcTemplate.execute("INSERT INTO FOO (BAR) VALUES ("+Global.REQUIRED_HAS_EXCEPTION+")");  
  10.         throw new RollbackException();  
  11.     }  
  12.     // REQUIRED撒播属性-被挪用者无非常抛出  
  13.     @Override  
  14.     @Transactional(rollbackFor = Exception.class,propagation = Propagation.REQUIRED)  
  15.     public void testRequiredNoException() throws RollbackException {  
  16.         jdbcTemplate.execute("INSERT INTO FOO (BAR) VALUES ("+Global.REQUIRED_NO_EXCEPTION+")");  
  17.     }  

(编辑:湖南网)

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

热点阅读