У меня есть база данных PostgreSQL, запущенная на docker, и я хочу проверить способность моей системы java обрабатывать с ней проблемы с подключением. Я тестирую свою службу java в двух разных сценариях ios: останавливая контейнер (docker stop postgresContainer
) и приостанавливая его (docker pause postgresContainer
)
Когда я останавливаю контейнер, JDB C быстро выдает исключение, которое я могу перехватить и обработать, но когда я приостанавливаю, служба попадает в заблокированное состояние, которое оператор JDB C зависает при выполнении навсегда, пока контейнер не будет "не приостановлен", когда поток метода вернется и выполняются отложенные операторы.
Я также заметил, что когда я получаю статус подключения JDB C, вызывая connection.isValid(1);
, он тоже здесь навсегда зависает.
public void executeStatement(String query) {
try {
Connection connection = getConnection();
Statement statement = connection.createStatement();
// It gets stuck here forever when the container is "paused"
// When I unpause, the query to be executed is persisted in DB
statement.execute(query);
statement.close();
connection.close();
}
catch (Exception e) {
statement.close();
connection.close();
}