DBCP2 - 何时从池中删除空闲连接
在配置 DBCP2 池时,根据文档,我注意到 - 有一个名为“的配置”,其描述为:timeBetweenEvictionRunsMillis
空闲对象逐行线程运行之间休眠的毫秒数。非正时,将不会运行空闲对象抖动线程。
其默认值为 。-1
这是否意味着 evictor 线程永远不会在默认配置中运行?然后如何强制执行配置参数 - 如果空闲连接计数大于 ,则池必须逐出空闲连接。maxIdle
maxIdle
在我看来,默认配置是这样的,即空闲连接永远不会被逐出,这似乎非常令人困惑。
还有另一种配置似乎在.softMiniEvictableIdleTimeMillis
timeBetweenEvictionRunsMillis
这方面的任何澄清都将有很大帮助。
目前,我正在配置如下池 - 因为我的目标是在池中长时间没有任何空闲连接(这是必需的,因为我们正在使用AWS RDS,并且似乎有一个奇怪的问题,我们经常遇到这个问题)
BasicDataSource dataSource = new BasicDataSource();
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
dataSource.setUrl(properties.getProperty("app.mysql.url"));
dataSource.setUsername(properties.getProperty("app.mysql.username"));
dataSource.setPassword(properties.getProperty("app.mysql.password"));
dataSource.setMaxIdle(20);
dataSource.setMaxWaitMillis(20000); //wait 10 seconds to get new connection
dataSource.setMaxTotal(200);
dataSource.setMinIdle(0);
dataSource.setInitialSize(10);
dataSource.setTestOnBorrow(true);
dataSource.setValidationQuery("select 1");
dataSource.setValidationQueryTimeout(10); //The value is in seconds
dataSource.setTimeBetweenEvictionRunsMillis(600000); // 10 minutes wait to run evictor process
dataSource.setSoftMinEvictableIdleTimeMillis(600000); // 10 minutes wait to run evictor process
dataSource.setMinEvictableIdleTimeMillis(60000); // 60 seconds to wait before idle connection is evicted
dataSource.setMaxConnLifetimeMillis(600000); // 10 minutes is max life time
dataSource.setNumTestsPerEvictionRun(10);