При запуске приложения создается соединение jdbc
Это неправильный подход. Соединение должно быть открыто в том же блоке try
, в котором вы создаете и выполняете оператор и собираете результаты. Соединение (и оператор, и набор результатов) должны быть закрыты в блоке finally
этого блока try
.
Невыполнение этого требования может привести к утечке ресурсов и неожиданному (и нежелательному) поведению приложения, когда это происходит и / или когда сервер БД решает прервать соединение, потому что оно слишком долго остается открытым для вашего приложения.
Ниже приведена основная идиома JDBC:
Connection connection = null;
PreparedStatement statement = null;
ResultSet resultSet = null;
try {
connection = database.getConnection();
statement = connection.prepareStatement(SOME_SQL);
resultSet = statement.executeQuery();
// ...
} finally {
if (resultSet != null) try { resultSet.close(); } catch (SQLException ignore) {}
if (statement != null) try { statement.close(); } catch (SQLException ignore) {}
if (connection != null) try { connection.close(); } catch (SQLException ignore) {}
}
Чтобы повысить производительность соединения, вы всегда можете использовать пул соединений, но не измените базовую идиому JDBC получения и закрытия ресурсов в кратчайшей области в блоке try-finally
. Большинство приличных сервлетконтейнеров / серверов приложений поставляются со встроенными средствами объединения пулов. Пока неясно, какой из них вы используете, невозможно дать подходящий ответ по этому поводу.
Тем не менее, я все равно настоятельно рекомендую отсоединить постоянный слой от вашего MVC-слоя. Это сделает его лучше тестируемым, повторно используемым и обслуживаемым.
Смотри также: