簡體   English   中英

如何處理 Spring CrudRepository 異常?

[英]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()方法只能拋出未經檢查的異常。 因此,我不應該抓住他們。 這種方法正確嗎? 如果是,有什么替代解決方案?

僅用ExceptionRuntimeException包圍

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM