我已经在春季向自己注入了一项服务,以允许该服务对其自身进行事务调用。不幸的是,我发现抛出NullPointerException并被捕获的require_new方法没有回滚新事务。外部事务不会中断,这是我想要的,但是我无法解释为什么不回滚要求新事务的原因。有任何想法吗?

@Service(value="orderService")
@Transactional
public class OrderServiceImpl implements OrderService {

    @Resource
    private OrderService orderService; // transactional reference to this service

    public void requiredTransMethod(){
        try {
            orderService.requiresNewTransMethod();
        }catch(Throwable t){
            LOG.error("changes from requiresNewTransMethod call should be rolled back right?", t);
        }
    }

    @Transactional(propagation = Propagation.REQUIRES_NEW)
    public void requiresNewTransMethod() {
        // database changes that are NOT rolled back
        throw new NullPointerException("bla bla bla");
    }

}

最佳答案

这可能是transactional annotations not working because you are calling them from within the same class的实例。

Spring的AOP实现的工作方式(默认情况下)是使用代理类,对于同一个类中的方法调用,该类为will not work

07-24 15:23