1.同一个类中,即A与B在同一类中,A()调用B()方法,A不加 @Transactional 事务注解,B加 @Transactional 事务注解,则B中的事务不起作用,A加事务,才会起作用,B中若将异常捕获,事务也不起作用
@Transactional //A加事务才会起作用 public void A(){ B(); } -------------------------------- @Transactional //B加不加事务无影响 public void B(){ try{ throw new Exception(); }catch(Exception e){//B中将异常铺货未能抛出到A中,事务也不起作用 } }
2.不同类中,即A在A类中,B在B类中,A调用B,A与B事务独立,此时A不加事务B加事务,B中事务可生效,则可将需要加事务的代码块抽取出放入其他类的方法中加事务来实现部分代码事务回滚
public void A(){ abcabc; try{ B(); }catch(Exception e){ } defdef;//B中发生异常事务回滚,不影响方法A } -------------------------------- @Transactional public void B(){ throw new Exception(); }
3.
PROPAGATION_REQUIRES_NEW 和 PROPAGATION_NESTED区别: