【发布时间】:2020-08-03 05:21:33
【问题描述】:
我有一个 SpringBoot 应用程序,它使用 spring 数据 CrudRepository 来持久化消息。
当出现数据库服务器端异常时,应用程序不要丢失消息,这一点很重要。
例如数据库服务器无法访问或数据库实例面临内存问题等。
因此我想特别处理它们并重试直到数据库服务器端问题
解决。
我遇到了这篇文章,它解释了 Spring JPA 抛出的 Exception 类
https://danielkvist.net/code/spring-data-crudrepository-exceptions
它总结了 Spring JPA 的 Exception 层次结构。因此我应用了Exception 处理逻辑。
saveMessages (List<Message> messages)
{
try {
crudRepo.saveAll(messages);
} catch (NonTransientDataAccessException | TransientDataAccessException e) {
// throw custom retryable exception for the service to retry
throw new CustomRetryableException(e);
}
}
当代码在生产中执行时,上面的逻辑失败了,因为抛出了不同类型的异常。
例如当 DB 服务器关闭时 CannotCreateTransactionException 被抛出,或者当 DB 服务器在请求 TransactionSystemException 之间重新启动时被抛出。
所以我想我错过了处理TransactionException 的子类
问题:
处理
TransactionException的子类的最佳方法是什么? (在我开头提到的上下文中)是否还有其他我应该处理的异常(
DataAccessException和TransactionException除外?
【问题讨论】:
标签: java spring spring-boot exception spring-data-jpa