接下来我们看一下挪用者要领的例子
- @Service
- public class BarServiceImpl implements BarService{
- @Autowired
- private FooService fooService;
- // 有事宜
- @Override
- @Transactional(rollbackFor = Exception.class)
- public void hasTransactional() throws RollbackException {
- // 挪用者有事宜,抛非常 被挪用者无非常
- fooService.testRequiredNoException();
- throw new RollbackException();
- }
- // 无事宜
- @Override
- public void noTransactional() throws RollbackException {
- // 挪用者无事宜,不抛非常 被挪用者有非常
- fooService.testRequiredHasException();
- }
- }
此时我们在措施挪用时举办查询
- String noException = Global.REQUIRED_NO_EXCEPTION;
- String hasException = Global.REQUIRED_HAS_EXCEPTION;
- try {
- barService.noTransactional();
- }catch (Exception e){
- log.info("第一种环境 {}",
- jdbcTemplate
- .queryForObject("SELECT COUNT(*) FROM FOO WHERE BAR='"+hasException+"'", Long.class));
- }
- try {
- barService.hasTransactional();
- }catch (Exception e){
- log.info("第二种环境 {}",
- jdbcTemplate
- .queryForObject("SELECT COUNT(*) FROM FOO WHERE BAR='"+noException+"'", Long.class));
- }
查察打印出来的日记
- 2019-10-16 13:02:04.142 INFO 11869 --- [ main] c.e.t.t.TransactionApplication : 第一种环境 0
- 2019-10-16 13:02:04.143 INFO 11869 --- [ main] c.e.t.t.TransactionApplication : 第二种环境 0
我们看到我们都没有查到响应的数据,声名数据都回滚了。此时我们应该就领略了那句话支持当前事宜,假如没有就新建事宜。
PROPAGATION_SUPPORTS
被挪用者是否有事宜,完全依靠于挪用者,挪用者有事宜则有事宜,挪用者没事宜则没事宜。
接下来我们照旧用上面的两个例子举办演示
- 第一种环境:被挪用者抛出非常的环境下,假如仍能查询到数据,声名事宜没有回滚,声名被挪用者没有事宜
- 第二种环境:挪用者抛出非常环境下,假如查不到数据,声名两个要领在一个事宜中
接下来如故是例子演示 (编辑:湖南网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|