【发布时间】:2016-12-05 17:19:37
【问题描述】:
在配置 DBCP2 池时,基于 documentation 我注意到 - 有一个名为 timeBetweenEvictionRunsMillis 的配置被描述为:
空闲对象运行之间休眠的毫秒数 驱逐线程。当为非正数时,没有空闲的对象驱逐线程将 运行。
其默认值为-1。
这是否意味着 evictor 线程永远不会在默认配置中运行?那么配置参数maxIdle 是如何强制执行的——如果空闲连接的数量大于maxIdle,则池必须驱逐空闲连接。
让我感到很困惑的是,默认配置是永远不会驱逐空闲连接。
还有另一个配置softMiniEvictableIdleTimeMillis 似乎在timeBetweenEvictionRunsMillis 之上发挥了一些作用。
在这方面的任何澄清都会有很大的帮助。
暂时,我正在配置池,如下所示 - 因为我的目标是在我的池中没有任何空闲连接太久(这是需要的,因为我们使用的是 AWS RDS 并且似乎有 a weird issue 与我们经常遇到的)
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);
【问题讨论】:
标签: java connection-pooling apache-commons-dbcp