Spring事务的一些细节问题

来源:互联网 发布:建筑工程招投标软件 编辑:程序博客网 时间:2024/05/24 05:40
Spring的事务是否回滚取决于方法终端是否能被Spring捕捉到
举个例子:
functionA,functionA,functionA均有事务,传播级别PROPAGATION_REQUIRED
public void functionA(){functionB();functionC();}public void functionB(){}public void functionC(){throw new RuntimeException("出错了");}


//场景一:抛错在方法内被捕捉public void functionA(){functionB();functionC();}public void functionB(){}public void functionC(){try{throw new RuntimeException("出错了");}catch(Exception e){e.printStackTrace();}}//这种情况下,functionA不会回滚//场景二:抛错在方法外被捕捉public void functionA(){functionB();try{functionC();}catch(Exception e){e.printStackTrace();}}public void functionB(){}public void functionC throws RuntimeException(){throw new RuntimeException("出错了");}//这种情况下,functionA回滚
总结:
一个添加了事务的方法报错会不会回滚取决于报错能不能被Spring捕捉到
这样理解:
我们把Bean的管理交给了Spring,每次我们需要一个Bean的时候,Spring用一个黑袋子把方法装起来给我们,方法报错了,自己在黑袋子里面catch注解决了,那么袋子外面的人不知道里面发生了什么,就无法回滚
但是如果没有自己catch住解决,就像是扎破袋子扔了个东西出来,这是Spring知道了你出错了,就会根据实物的规则,将方法回滚
新人自己理解,有错请指出




0 0
原创粉丝点击