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