[英]How to handle Spring CrudRepository exceptions?
我正在尝试实施回滚机制以将图像保存到 AWS/S3 并将其元数据保存到 AWS/RDS。 但是我对处理异常感到困惑。 Spring 文档对于抛出异常并不清楚。
如果我无法将元数据保存到 RDS,我想删除 S3 记录。
Image img = s3Service.saveImageToS3(file, description);
img = rdsRepository.save(img);
// couldn't save to RDS, so rollback from S3
if(img.getId()==0){
s3Service.deleteImageFromS3(img);
return new ResponseEntity<>(img, HttpStatus.INTERNAL_SERVER_ERROR);
}else {
return new ResponseEntity<>(img, HttpStatus.CREATED);
}
我在上面使用的rdsRepository
扩展了"org.springframework.data.repository.CrudRepository"
public interface RdsRepository extends CrudRepository<Image, Long> {
图片 class:
@Entity(name="Image")
@Data
@AllArgsConstructor @NoArgsConstructor
public class Image {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private long id;
据我所知, CrudRepository.save()
方法只能抛出未经检查的异常。 因此,我不应该抓住他们。 这种方法正确吗? 如果是,有什么替代解决方案?
仅用Exception
或RuntimeException
包围
Image img = s3Service.saveImageToS3(file, description);
try {
img = rdsRepository.save(img);
} catch (Exception e) {
//Rollback saveImageToS3
throw e;
}
// couldn't save to RDS, so rollback from S3
if(img.getId()==0){
s3Service.deleteImageFromS3(img);
return new ResponseEntity<>(img, HttpStatus.INTERNAL_SERVER_ERROR);
}else {
return new ResponseEntity<>(img, HttpStatus.CREATED);
}
事实上,并没有抛出异常——结果是一样的——没有保存数据。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.