我们有一个Java Web应用程序,它利用与各种数据库服务器的多个不同连接。最近,一些数据库服务器(由不同部门管理)被重新配置为位于防火墙后面,这可以减少任何45秒的空闲连接。我被告知我们可以设置一个keepAlive属性用于我们的连接。然而,经过一些研究后似乎并非如此。相反,我必须得出结论,我必须使用以下属性:
缺点是我必须确保应用程序保持与这些服务器的连接,而不管另一方的45秒超时。我已经完成了一些配置并没有成功(例如:当连接断开时,连接会更快地重新建立,但仍然会很快下降)。
以下是BasicDataSource对象的原始代码:
private BasicDataSource createDefaultDataSource() {
BasicDataSource ds = new BasicDataSource();
ds.setInitialSize(3);
ds.setMinIdle(1);
ds.setMaxIdle(5);
ds.setMaxActive(100);
ds.setMaxWait(3 * 1000);
ds.setTimeBetweenEvictionRunsMillis(30 * 1000);
ds.setMinEvictableIdleTimeMillis(60 * 1000);
ds.setLogAbandoned(true);
ds.setRemoveAbandoned(true);
ds.setRemoveAbandonedTimeout(60);
return ds;
}
以下是我认为的解决方案,但似乎并不像我期望的那样:
private BasicDataSource createDefaultDataSource() {
BasicDataSource ds = new BasicDataSource();
ds.setInitialSize(3);
ds.setMinIdle(1);
ds.setMaxIdle(5);
ds.setMaxActive(100);
ds.setMaxWait(3 * 1000);
ds.setTimeBetweenEvictionRunsMillis(15 * 1000); // was 30 seconds
ds.setMinEvictableIdleTimeMillis(30 * 1000); // was 60 seconds
ds.setLogAbandoned(true);
ds.setRemoveAbandoned(true);
ds.setRemoveAbandonedTimeout(60);
ds.setValidationQuery("select 1");
ds.setTestOnBorrow(true);
ds.setTestOnReturn(true);
ds.setTestWhileIdle(true);
return ds;
}
也许我的时机已关闭,或许还有其他属性需要与这些相关联,或者我应该以不同的方式进行此操作。
应该设置/更改哪些属性以弥补45秒的空闲丢弃策略?