Я работаю над игрой, которая работает на сервере Java. Для объединения баз данных я использую HikariCP, который является прекрасной библиотекой, но теперь бросает следующую ошибка моего путь:Ошибка подключения HikariCP
[Hikari housekeeper (pool HikariPool-0)] WARN com.zaxxer.hikari.pool.ProxyLeakTask - Connection leak detection triggered for connection [email protected], stack trace follows
java.lang.Exception: Apparent connection leak detected
at nl.finicky.lemonade.database.Database.prepare(Database.java:43)
at nl.finicky.lemonade.rooms.RoomFactory.loadRoom(RoomFactory.java:25)
at nl.finicky.lemonade.rooms.RoomFactory.<init>(RoomFactory.java:20)
at nl.finicky.lemonade.Lemonade.main(Lemonade.java:30)
Теперь я знаю, что утечка соединения означает, что открытое соединение плавает где-то, но я не могу понять, как и где.
Ниже приведен метод в моем классе базы данных, в котором ошибка должна произойти в соответствии с трассировкой стека.
public PreparedStatement prepare(String query) {
PreparedStatement statement = null;
try {
while (statement == null) {
statement = this.dataSource.getConnection().prepareStatement(query, 1);
// The line triggering the error^
if (statement != null) {
this.databasePool.getStorage();
}
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
return statement;
}
}
Это всего лишь базовый метод для инициирования утверждения. Когда это вызвано, я использую его, а затем звоню resultSet.close()
, preparedStatement.getConnection.close()
и preparedStatement.close()
Показывает, что соединение открыто.
Как это решить? Благодаря!