如何从事务性方法调用非事务性方法

How to call non-transactional methods from a Transactional method

我有一个事务性方法,还有一个非事务性私有方法,它执行一些数据库更新。

我需要从事务方法调用这个私有方法,但如果出现异常,来自非事务方法的更新也会回滚。

我如何使非事务性方法从私有方法提交更新,因为它是从事务性方法调用的,并且在出现异常时它的更改也会回滚

@Transactional
public Result createTransaction(){
    try{
         //do someting
      }Catch (Exception e){
         markAsFailed();
         throw new CtxException("customer.notfound");
       }
}


 private void markAsFailed(){
        //do db update
       }

只是提出答案以防万一有人需要,需要注意的重点是需要从非事务性方法调用的事务性方法应该位于单独的 spring bean 中,如 JB Nizet 因为 spring 使用代理来实现此行为,并且必须在另一个 class 中定义该方法,以便 spring 应该能够触发事务。一旦进入 class,您将不会再次通过代理

需要从非事务方法调用的事务方法应该在单独的 spring bean