我想使用@Transactional注释在Spring Boot中嵌套事务

时间:2019-07-16 19:08:35

标签: spring-boot spring-transactions

当前,如果方法C中发生异常,则代码不会从方法B中回滚数据库更改。我的期望是方法A应该以这样的方式管理事务:如果方法C中发生异常,则代码应回滚方法B中所做的更改。 我正在使用Spring Boot,Maven项目。

class SomeClassA{

    @Autowired
    SomeClassB someClassB;

    @Autowired
    SomeClassC someClassC;

    @Transactional
    public A(){
        try{
            //This method works fine with some database operations.
            someClassB.B();

            //In this method, exception occurrs.
            someClassC.C();
        }
        catch(Exception e){

        }
    }   
}

class SomeClassB{

    @Transactional
    public B(){
        //some code with database operation
    }   
}

class SomeClassC{

    @Transactional
    public C(){
        //some code with database operation
        //some exception occurs here
    }   
}

1 个答案:

答案 0 :(得分:0)

是Checked或Runtime异常吗?

因为@Transactional中的default behaviour说:

  

任何RuntimeException都会触发回滚,并且任何选中的Exception都会触发   不是。