我已经在春季向自己注入了一项服务,以允许该服务对其自身进行事务调用。不幸的是,我发现抛出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。