Apache dbcp 连接池无法正常工作

我正在尝试按照此处的教程mysql使用连接池连接到数据库:apache dbcp2

https://git-wip-us.apache.org/repos/asf?p=commons-dbcp.git;a=blob;f=doc/PoolingDataSourceExample.java;h=2a12c74898930b9623223db1597b8a8052a6f1df;hb=HEAD

返回连接的我的数据库连接类如下所示:

public class DbConnection {


private static interface Singleton {


    final DbConnection INSTANCE = new DbConnection();

}


private final PoolingDataSource<PoolableConnection> dataSource;


private DbConnection() {

    // A ConnectionFactory that the pool will use to create Connections.

    DriverManagerConnectionFactory connectionFactory = new DriverManagerConnectionFactory(url, user, pass);  //url,user,pass for db connnection


    //implement the pooling functionality.

    PoolableConnectionFactory poolableConnectionFactory = new PoolableConnectionFactory(connectionFactory, null);

    GenericObjectPoolConfig config = new GenericObjectPoolConfig();

    config.setMaxWaitMillis(500);

    config.setMaxTotal(20);

    config.setMaxIdle(5);

    config.setMinIdle(5);

    //PoolingDataSource expect an ObjectPool

    ObjectPool<PoolableConnection> connectionPool = new GenericObjectPool<>(poolableConnectionFactory, config);

    // Set the poolableConnectionFactory's pool property to the owning pool

    poolableConnectionFactory.setPool(connectionPool);


    this.dataSource = new PoolingDataSource<>(connectionPool);

}


public static Connection getCon() throws SQLException {

    return Singleton.INSTANCE.dataSource.getConnection();

}

我正在使用 apache jmeter 来测试连接并从我的 mysql 数据库返回一些东西。我创建了 100 个用户,启动时间(以秒为单位)为 2 秒。我创建了一个Http request,当我试图在其中查看我的响应时,view results tree我成功地获得了前 20 个请求的响应。来自(21 到 100)的后续请求有空白响应。我经历了许多涉及的问题:


java.sql.SQLException:无法获取连接,池错误等待空闲对象超时


MMTTMM
浏览 120回答 1
1回答

森林海

您没有关闭Connection对象,您必须在 try-with-resources 块中声明此类变量:try&nbsp;(Connection&nbsp;conn&nbsp;=&nbsp;DbConnection.getCon();&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PreparedStatement&nbsp;ps&nbsp;=&nbsp;conn.prepareStatement("SELECT&nbsp;id&nbsp;FROM&nbsp;test&nbsp;WHERE&nbsp;id&nbsp;=?;"))&nbsp;{您还需要关闭ResultSet,要么在方法中调用close方法,要么ResultSet使用返回它的新方法将其添加到 try-with-resources 块
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java