簡體   English   中英

連接池不重用空閑連接

[英]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)時,我看到它沒有使用空閑連接,而是創建了一堆新連接。 我怎樣才能解決這個問題?

下面是我向數據庫發送查詢后連接表的一些圖像。 最初的: 我最初的connection_activity

查詢后: 查詢后我的 connection_activity

您可以看到在第一張圖中有 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;
    }

您的配置說池中的連接數應該在15120之間。

您可以使用此配置在空閑state 中觀察到超過15連接。

屬性idleTimeout控制連接在空閑時間(默認 - 10 分鍾)時的退出。

所以換句話說,只有當您的應用程序在 10 分鍾內沒有訪問(加上 30 秒,因為在此期間定期檢查連接),您應該期望看到池的最小大小。

更多信息見這里

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM