Java Spring事务传播和回滚行为
我不想只回滚methodThree事务。现在它正在回滚方法2/3/4/5中所做的所有更改。我无法进一步理解Java Spring事务传播和回滚行为,java,spring,spring-mvc,transactions,spring-transactions,Java,Spring,Spring Mvc,Transactions,Spring Transactions,我不想只回滚methodThree事务。现在它正在回滚方法2/3/4/5中所做的所有更改。我无法进一步理解 我尝试在所有其他方法中执行与事务相关的代码,在methodThree()中,它只是在DB中更新状态。如果我理解您在这里尝试的是让methodThree在父事务中嵌套的自己的事务中运行,那么您的问题可能是这些方法在同一个类中 这很重要,因为Spring应用AOP的方式,在本例中,通过应用事务逻辑,使用代理来拦截方法调用。问题是方法调用是内部的或是自调用的,因此从不通过代理。这意味着永远不会为
我尝试在所有其他方法中执行与事务相关的代码,在methodThree()中,它只是在DB中更新状态。如果我理解您在这里尝试的是让methodThree在父事务中嵌套的自己的事务中运行,那么您的问题可能是这些方法在同一个类中 这很重要,因为Spring应用AOP的方式,在本例中,通过应用事务逻辑,使用代理来拦截方法调用。问题是方法调用是内部的或是自调用的,因此从不通过代理。这意味着永远不会为MethodThree()创建新事务 您有两个选择:
使用选项1,我的嵌套事务结果成功获得,我认为可能会成功。如果我的回答有助于解决您的问题,请将其标记为已接受。谢谢
@Service
public Class Demo(){
@Transactional(rollbackFor=CustomException.class)
@Override
public RetunType methodONE()throws Exception{
methodTWO();
methodFIVE();
}
@Transactional
@Override
public RetunType methodTWO()throws Exception{
methodFOUR();
methodTHREE();
throws new CustomException("error_msg");
}
@Transactional(propagation=Propagation.REQUIRES_NEW)
@Override
public RetunType methodTHREE(){
.
..
.
..
.
}
}
public Class CustomException extends Exception{
public CustomException(String msg){
super(msg)
}
}