gpt4 book ai didi

java - 代理的 REQUIRES_NEW 方法不会回滚(spring)

转载 作者:行者123 更新时间:2023-12-01 11:39:13 25 4
gpt4 key购买 nike

我让 spring 将服务注入(inject)自身,以允许服务对其自身进行事务调用。不幸的是,我发现抛出 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正如从同一个类中调用方法所期望的那样。

关于java - 代理的 REQUIRES_NEW 方法不会回滚(spring),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29680783/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com