Если вы остановите весь tomcat, то ваше соединение с базой данных будет закрыто, потому что исполняемый файл java, на котором запущен Tomcat, освободит соединение при остановке.
Даже если вы не остановите сервер, если Javaрешает, что ваш Connection
объект больше не используется, тогда он будет собирать мусор.Ты просто не знаешь когда.
По другим примечаниям:
- Возможно, вам следует поискать способы встраивания
DataSource
в сервер и получения DataSource
с сервера: эта страница может помочь - Вам следует переписать свой код, чтобы использовать , попробуйте использовать ресурсы (Java 7 ++), которые заботятся о корректном закрытии вашего ресурса (ваш код неверен).
С попробуйте с ресурсами :
DataSource dataSource = MySQLConnectionPool.setUpPool();
try (Connection connObj = dataSource.getConnection()) {
try (Statement stmt = connObj.createStatement()) {
try (ResultSet result = stmt.executeQuery(MySQLQuery)) {
while(result.next()) {
//Some code here
}
}
}
} catch (SQLException sqlException) {
// do something
}
Или:
DataSource dataSource = MySQLConnectionPool.setUpPool();
try (Connection connObj = dataSource.getConnection();
Statement stmt = connObj.createStatement();
ResultSet result = stmt.executeQuery(MySQLQuery)
) {
while(result.next()) {
//Some code here
}
} catch (SQLException sqlException) {
// do something
}
Как я уже говорил выше, ваш код неверен, потому что у вас может быть исключение (впо крайней мере, SQLException
) при закрытии ResultSet
или Statement
, поэтому более поздний объект никогда не будет освобожден вашим кодом:
try {
// Closing ResultSet Object
if(result != null) {
result.close(); // if it fails, stmt and connObj are not closed.
}
// Closing Statement Object
if(stmt != null) {
stmt.close(); // if it fails, connObj is not closed.
}
// Closing Connection Object
if(connObj != null) {
connObj.close();
}
} catch(Exception sqlException) {
}
Если вы не можете использовать попробуйте ресурсы (Java 6, вероятно, больше не поддерживается десятилетиями, но кто знает), тогда ваш код должен выглядеть следующим образом:
Connection connObj = null;
Statement stmt = null;
ResultSet result = null;
try {
// ... do whatever is needed
} finally {
if(result != null) {
try {result.close();} catch (Exception ignored) {}
}
if(stmt != null) {
try {stmt.close();} catch (Exception ignored) {}
}
if(connObj != null) {
try {connObj .close();} catch (Exception ignored) {}
}
}