У меня есть приложение SpringBoot, которое использует данные весны CrudRepository
для сохранения сообщений. Для приложения важно не терять сообщения, когда исключение на стороне сервера БД .
, например, недоступен сервер БД или экземпляр БД сталкивается с проблемами памяти и т. Д. c.
Поэтому я хочу обработать их особенно и повторить, пока проблема на стороне БД не будет решена. Я наткнулся на эту статью, в которой объясняются Exception
классы, выброшенные Spring JPA https://danielkvist.net/code/spring-data-crudrepository-exceptions, в которых обобщается иерархия Exception
для Spring JPA. Поэтому я применил следующую Exception
обработку logi c.
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);
}
}
Когда код был выполнен в производстве выше logi c, произошел сбой, поскольку возникали различные типы исключений. например, когда сервер БД был отключен, CannotCreateTransactionException
был сброшен или когда сервер БД был перезапущен в промежутке между запросами TransactionSystemException
. Поэтому я думаю, что пропустил обработку подклассов TransactionException
Вопросы:
Каков наилучший способ обработки подклассов TransactionException
? (В контексте, который я упомянул в начале)
Существуют ли какие-либо дополнительные исключения (кроме DataAccessException
и TransactionException
, которые я должен обработать?