Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java tomcat jdbc池超时不工作_Java_Oracle_Tomcat_Jdbc_Connection Timeout - Fatal编程技术网

Java tomcat 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

我正在使用tomcat jdbc连接池和Oracle数据库开发高负载应用程序。确保我的应用程序具有非常小的数据库查询超时(不超过3秒)非常重要,以防止长时间运行的查询或数据库缓慢阻塞我的所有应用程序。为了模拟长时间运行的查询,我使用altersystemquiescerestricted语句将数据库置于QUIESCE状态

但看起来超时值没有影响-当我开始测试我的应用程序时,它会挂起

以下是我的jdbc池配置:

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