Java HikariCP连接泄漏
我正在开发一个在Java服务器上运行的游戏。对于数据库池,我使用的是HikariCP,这是一个非常好的库,但它现在以我的方式抛出以下错误:Java HikariCP连接泄漏,java,database-connection,Java,Database Connection,我正在开发一个在Java服务器上运行的游戏。对于数据库池,我使用的是HikariCP,这是一个非常好的库,但它现在以我的方式抛出以下错误: [Hikari housekeeper (pool HikariPool-0)] WARN com.zaxxer.hikari.pool.ProxyLeakTask - Connection leak detection triggered for connection com.mysql.jdbc.JDBC4Connection@5910e440, sta
[Hikari housekeeper (pool HikariPool-0)] WARN com.zaxxer.hikari.pool.ProxyLeakTask - Connection leak detection triggered for connection com.mysql.jdbc.JDBC4Connection@5910e440, 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)
这只是初始化语句的基本方法。调用此函数时,我使用它,然后调用resultSet.close()
,preparedStatement.getConnection.close()
和preparedStatement.close()
但它仍然告诉我连接已打开
我如何解决这个问题?谢谢 稍后调用
preparedStatement.getConnection.close()
只会得到一个不同的连接并将其关闭
你不能用这种模式做你想做的事。调用this.dataSource.getConnection().prepareStatement(…)
就是从池中获取一个连接,并丢弃对它的引用,之后没有人可以关闭它。在这个方法中,即使保留了对它的引用,也不能关闭连接,因为这样返回的PreparedStatement将不可用
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;
}
}