[英]Connection pooling is not reusing idle connections
我對 HikariCP 很陌生,我遇到了一個問題。 我有一種使用 HikariDataSource 從數據庫獲取連接的方法:
public Connection getConnection() {
try {
return dataSource.getConnection();
}
catch (SQLException ex)
{
ex.printStackTrace();
return null;
}
}
但是,當我檢查 pgAdmin(這是一個 PostgreSQL db btw)時,我看到它沒有使用空閑連接,而是創建了一堆新連接。 我怎樣才能解決這個問題?
您可以看到在第一張圖中有 19 個連接,其中 18 個處於空閑狀態。 但是,在查詢之后,有一堆新的連接,其中大部分是空閑的。 我是不是把 Hikari 配置錯了? 這是我的配置:
config.setJdbcUrl("jdbc:postgresql://localhost/Postgres 13/BGWW Bot");
config.setUsername();
config.setPassword();
config.addDataSourceProperty("max_connections", "120");
config.addDataSourceProperty("cachePrepStmts", "true");
config.addDataSourceProperty("prepStmtCacheSize", "250");
config.addDataSourceProperty("prepStmtCacheSqlLimit", "2048");
config.setDataSource(ds);
config.setMaximumPoolSize(120);
config.setMinimumIdle(15);
最后,這是我使用 getConnection() 連接的方法之一
public float[] getReqs()
{
try (Connection conn = getConnection())
{
String getReqs = "SELECT id, swstars, swwins, swkdr FROM reqs;";
PreparedStatement stmt = conn.prepareStatement(getReqs);
ResultSet rs = stmt.executeQuery();
while(rs.next())
{
if(rs.getInt(1) == 1)
{
float[] array = new float[]{rs.getInt(2), rs.getInt(3), rs.getFloat(4)};
conn.close();
return array;
}
}
conn.close();
} catch (SQLException throwables) {
throwables.printStackTrace();
return null;
}
return null;
}
您的配置說池中的連接數應該在15
和120
之間。
您可以使用此配置在空閑state 中觀察到超過15
連接。
屬性idleTimeout
控制連接在空閑時間(默認 - 10 分鍾)時的退出。
所以換句話說,只有當您的應用程序在 10 分鍾內沒有訪問(加上 30 秒,因為在此期間定期檢查連接),您應該期望看到池的最小大小。
更多信息見這里
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.