Мы обнаружили ошибку в старом коде, когда соединения не закрываются. Это легко исправить, но мне интересно, как мы докажем, что это исправлено. Существует выбор использования пула соединений или нет. Для использования пула было бы легко добавить мониторинг для пула, но когда пул соединений не используется, как мы отслеживаем эти незакрытые, потерянные соединения? Это как любая другая утечка памяти?
Ошибка выглядит как ошибка вырезания и вставки. У нас есть несколько классов, которые управляют подключением к БД, поэтому оно выглядит примерно так:
OurDBConn conn1 = ConnectionManager.getConnection();
try {
// business logic
} catch () {
//
} finally {
ConnectionManager.returnConnection(conn1);
}
/// and then later in the same method
OurDBConn conn2 = ConnectionManager.getConnection();
try {
// business logic
} catch () {
//
} finally {
ConnectionManager.returnConnection(conn1); // NOTE Error: conn1 should be conn2
}
Я не знаю, почему более ранние кодеры не просто использовали исходное соединение, а вот что это такое
(начать редактирование / добавление)
Да, у нас также есть код подключения, и поэтому я могу использовать ответы.
Однако я не думаю, что задал правильный вопрос, хотя ответы ниже отвечают на вопрос, который я задал. Я не уверен, что именно нужно делать с помощью stackoverflow; задать другой вопрос или отредактировать этот?
Один из вопросов, которые я должен был задать, заключается в следующем: как эти осиротевшие незамкнутые соединения проявятся в производительности системы? Кроме того, поскольку эти объекты подключения существуют только в рамках определенного метода, не будут ли подключения иметь право на сборку мусора? И затем, если они gc'ed, каков эффект gc'ed открытых соединений?
(конец редактирования)