请参考下面的代码片段
@Transactional(readOnly = false, propagation = Propagation.REQUIRED, rollbackFor = { Throwable.class })
@Override
public MyClass myMethod(myParams) {
try{
myRepo.saveAll(myEntityList);
ResponseEntity<String> responseEntity = restTemplate.postForEntity(myUrl,requestParam,String.class);
if(responseEnity.getBody()!=null && StringUtils.equalsIgnoreCase(responseEnity.getBody(),"Failure")){
log.error("Rest Call Failed");
throw new RestClientException("Error in remote service");
}
}catch(Exception e){
e.printStackTrace();
}
}
现在在控制台日志中,我可以看到RestClientException
被抛出,但myRepo.saveAll(myEntityList);
没有回滚,而是将数据插入DB。
谁能解决这个问题?
我的要求是,在RestServiceCall
中,如果我得到一个失败的响应,那么我的当前事务应该完全回滚。
您的事务没有回滚,因为没有抛出异常,您正在捕获它。
正如@Sumit Ghost提到的,您可以记录它并重新抛出异常