dataSourcePool закрыть прерванное соединение при выпуске в пул
Я использую пул соединений Hikari jdbc.
Когда инструкция execute witch производит исключение (например по сети разбивается). следующим образом:
try{
Connection con = pool.getConnection();
con.executeQuery("....");
}catch(Exception e){
con.close();
}
Делает con.close
будет выселять разорванное соединение, вместо того, чтобы освободить его в пул.
Если разорванное соединение отпущено в пул. он может быть получен следующим запросом getConnection
.
4 ответа:
Если ваш драйвер совместим с JDBC4 (и поддерживает
Connection.isValid()
), проверка соединения выполняется через этот API по умолчанию).В противном случае вы можете задать connectionTestQuery, который будет выполняться для проверки.
Используйте con. close в блоке finally, иначе в блоке catch вы должны сначала спросить, если con != null для исключения исключения, созданного в блоке catch. Другие alernative можно заключить, кон.close() в других попробовать{}поймать{} блок. Надеюсь, это поможет.
Вы должны рассмотреть try-with-resource:
try(Connection con = pool.getConnection()) { DO SOMETHING WITH CONNECTION }catch(Exception e){ e.printStackTrace(); }
Это будет гарантировать, что соединение будет возвращено в пул. Проверка правильности соединения является задачей для пула , а не для вашего кода. Вы можете настроить пул для проверки вашего соединения с помощью свойстваconnectionTestQuery - Вот и все.