У меня есть Docker-контейнер с Java-приложением, которое использует БД для сохранения некоторых данных. У моего приложения есть класс, который расширяет другой, который не является моим кодом (в частности, SinkTask, класс от Kafka, который используется для передачи данных из Kafka в другую систему). Когда приложение запускается, оно открывает соединение с базой данных. Иногда база данных закрывает соединение и задачи начинают сбой. Исключения, создаваемые этими сбоями, фиксируются в одной части моего кода, и я могу придумать разные способы их обработки:
1. Просто выполните код из приложения, которое останавливает и снова устанавливает соединение
2. Перезапустить контейнер Docker, создать новое соединение в процессе
Я думаю, что лучшее решение - это номер 1. Однако я хотел знать, как я могу вызвать вторую ситуацию. Я предполагаю, что я должен выбросить новое исключение в блоке catch, способное завершить приложение (помните, что часть кода SinkTask находится вне моего контроля). Это было бы хорошим решением? Какое исключение я должен бросить в этом случае?
Это часть кода, где я ловлю исключение
private void commitCollections() {
for (SinkCollection sc : collections.values()) {
try {
commitCollection(sc);
} catch (Exception e) {
LOG.error("Error flushing collection " + sc.getTableName(), e);
}
}
transactionRecordCount = 0;
try {
connection.commit();
} catch (SQLException e) {
LOG.error("Commit error", e);
}
}