| 
                         接下来我们看一下调用者方法的例子 
- @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 
被调用者是否有事务,完全依赖于调用者,调用者有事务则有事务,调用者没事务则没事务。 
接下来我们还是用上面的两个例子进行演示 
    -  第一种情况:被调用者抛出异常的情况下,如果仍能查询到数据,说明事务没有回滚,说明被调用者没有事务
 
    -  第二种情况:调用者抛出异常情况下,如果查不到数据,说明两个方法在一个事务中
 
 
接下来仍然是例子演示                         (编辑:滁州站长网) 
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! 
                     |