Java Apache DBCP2连接池超过多线程时的最大连接数
我已经使用ApacheDBCP2库创建了一个数据库连接池。它成功地连接到数据库。部分配置如下所示:Java Apache DBCP2连接池超过多线程时的最大连接数,java,multithreading,apache-commons-dbcp,Java,Multithreading,Apache Commons Dbcp,我已经使用ApacheDBCP2库创建了一个数据库连接池。它成功地连接到数据库。部分配置如下所示: pool = new BasicDataSource(); pool.setDriverClassName("com.mysql.jdbc.Driver"); pool.setInitialSize(1); pool.setMaxTotal(2); 为了测试是否遵守了最大连接数,我设置了一个包含10个线程的executor服务,其中每个线程使用pool.getConnection()获得一个连接
pool = new BasicDataSource();
pool.setDriverClassName("com.mysql.jdbc.Driver");
pool.setInitialSize(1);
pool.setMaxTotal(2);
为了测试是否遵守了最大连接数,我设置了一个包含10个线程的executor服务,其中每个线程使用pool.getConnection()
获得一个连接,并执行SQL语句SELECT SLEEP(5)
由于最大连接数为2,我预计该测试将花费大约25秒的时间,因为一次只有两个线程可以执行该命令。但是,池为所有线程提供了一个连接,因此测试只需要大约5秒钟
BasicDataSource
不是线程安全的吗?或者,如果是,如何配置它以在使用最大连接数时阻止其他线程?是否捕获并记录所有可能的异常?当没有更多连接时,池可能会抛出异常而不是阻塞。是-没有异常被抑制。每个线程都成功地执行SQL语句,因此池发出的是有效的连接,一次发出的连接太多了!苏亚杰。你找到原因和解决办法了吗。