Java tomcat jdbc池超时不工作
我正在使用tomcat jdbc连接池和Oracle数据库开发高负载应用程序。确保我的应用程序具有非常小的数据库查询超时(不超过3秒)非常重要,以防止长时间运行的查询或数据库缓慢阻塞我的所有应用程序。为了模拟长时间运行的查询,我使用altersystemquiescerestricted语句将数据库置于QUIESCE状态 但看起来超时值没有影响-当我开始测试我的应用程序时,它会挂起 以下是我的jdbc池配置:Java tomcat jdbc池超时不工作,java,oracle,tomcat,jdbc,connection-timeout,Java,Oracle,Tomcat,Jdbc,Connection Timeout,我正在使用tomcat jdbc连接池和Oracle数据库开发高负载应用程序。确保我的应用程序具有非常小的数据库查询超时(不超过3秒)非常重要,以防止长时间运行的查询或数据库缓慢阻塞我的所有应用程序。为了模拟长时间运行的查询,我使用altersystemquiescerestricted语句将数据库置于QUIESCE状态 但看起来超时值没有影响-当我开始测试我的应用程序时,它会挂起 以下是我的jdbc池配置: String connprops = "oracle.net.CONNECT_TIME
String connprops = "oracle.net.CONNECT_TIMEOUT=3000;oracle.jdbc.ReadTimeout=3000;"
+ "oracle.net.READ_TIMEOUT=3000";
pp.setConnectionProperties(connprops);
pp.setDriverClassName("oracle.jdbc.OracleDriver");
pp.setTestOnBorrow(true);
pp.setTestOnConnect(true);
pp.setTestOnReturn(true);
pp.setTestWhileIdle(true);
pp.setMaxWait(2000);
pp.setMinEvictableIdleTimeMillis(20000);
pp.setTimeBetweenEvictionRunsMillis(20000);
pp.setValidationInterval(3000);
pp.setValidationQuery("SELECT 1 FROM DUAL");
pp.setMaxAge(3000);
pp.setRemoveAbandoned(true);
pp.setRemoveAbandonedTimeout(3);
pp.setJdbcInterceptors("org.apache.tomcat.jdbc.pool.interceptor.QueryTimeoutInterceptor(queryTimeout=3)");
dataSource = new DataSource();
dataSource.setPoolProperties(pp);
这就是我处理连接的方式(非常简单):
有什么想法吗?提前谢谢 尝试使用此配置:
String connprops = "oracle.net.CONNECT_TIMEOUT=\"3000\";oracle.jdbc.ReadTimeout=\"3000\";"
+ "oracle.net.READ_TIMEOUT=\"3000\"";
所有非字符串值都将被忽略:
String connprops = "oracle.net.CONNECT_TIMEOUT=\"3000\";oracle.jdbc.ReadTimeout=\"3000\";"
+ "oracle.net.READ_TIMEOUT=\"3000\"";
public String getProperty(String key) {
Object oval = super.get(key);
String sval = (oval instanceof String) ? (String)oval : null; // <- !!!!
return ((sval == null) && (defaults != null)) ? defaults.getProperty(key) : sval;
}
stmt.setQueryTimeout(3); // int seconds