繁体   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