0
我有弹簧注入一个服务到自身允许服务进行事务性调用自己。不幸的是,我发现一个引发NullPointerException并被捕获的requires_new方法并没有回滚新的事务。外部事务不会中断,这是我想要的,但我无法解释为什么需要新的事务不会回滚。有任何想法吗?Proxied REQUIRES_NEW方法不会回滚(spring)
@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");
}
}
我注意到,在requiredTransMethod()返回控件之前,没有被回滚的数据库更改不会被提交。这使我相信requiresNewTransMethod()正在使用调用者的事务。在实际实现中调用的其他require_new方法在将控制权返回给requiredTransMethod()后立即提交。不确定require_new方法和不执行方法之间有什么区别。 – user2832649
即使使用Propagation.NOT_SUPPORTED注释了requiredTransMethod,requireNewTransMethod()更改也不会提交,直到requiredTransMethod()返回。 – user2832649