Java DBCP2 连接池在最大连接关闭后再次创建连接

Java DBCP2 Connection pooling is creating connection agian after max connection closed

我正在尝试通过 apache dbcp2 使用连接池。

我的 maxTotal 连接数是 5。我将在使用后关闭每个连接。

但是在从连接池中关闭 5 个连接后我仍然获得连接。

是否会在关闭 5 个连接后 ping 数据库以获取连接?或者它会从连接池本身获取而不去 db.

下面是我的示例代码片段。请纠正我对连接池的理解。

BasicDataSource bds = getBasicDataSource();

System.out.println (bds.getMaxTotal()); // Prints - 5

for (int i=0; i<10; i++) {
    conn = bds.getConnection();
    System.out.println("Conn "+conn); // conn object printing different values for all 10 connections
    conn.close();
}

客户端从池中获得的连接并不是真正的 java.sql.Connection,它是 java.sql.Connection 的包装器(代理),用于自定义某些方法的行为。 close() 方法就是其中之一,它不会关闭 Connection 实例,而是 returns 将其关闭到池中。

尝试使用C3PO,在我看来它比DBCP好。