저는 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()
을 여전히 호출합니다. 연결이 열려 있다고 알려줍니다.
어떻게 해결할 수 있습니까? 감사!