[英]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.