我使用Apache DBCP2库创建了一个数据库连接池。它成功连接到数据库。部分配置如下所示:
pool = new BasicDataSource();
pool.setDriverClassName("com.mysql.jdbc.Driver");
pool.setInitialSize(1);
pool.setMaxTotal(2);
为了测试是否遵守了最大连接数,我设置了一个包含10个线程的执行程序服务,其中每个线程使用pool.getConnection()
获取连接并执行SQL语句SELECT SLEEP(5)
。
由于最大连接数为2,我预计此测试大约需要25秒,因为一次只有两个线程可以执行该命令。但是,池为所有线程提供连接,因此测试只需大约5秒钟。
BasicDataSource
不是线程安全的吗?或者如果是,如何在最大连接数被使用时将其配置为阻止其他线程?