Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.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
SpringJDBCTemplate在获取JDBC连接时卡住了_Spring_Log4j_Spring Jdbc_Jdbctemplate_Apache Commons Dbcp - Fatal编程技术网

SpringJDBCTemplate在获取JDBC连接时卡住了

SpringJDBCTemplate在获取JDBC连接时卡住了,spring,log4j,spring-jdbc,jdbctemplate,apache-commons-dbcp,Spring,Log4j,Spring Jdbc,Jdbctemplate,Apache Commons Dbcp,我对SpringJDBCTemplate有问题。它以前工作正常,但现在不返回任何值,也不返回错误消息。我的表已经变得相当大,大约有3500万条记录,这可能是一个原因 但我主要担心的是jdbcTemplate不会引发任何异常,也不会将控件释放到下一行代码,这样我的应用程序就会中断。 如果由于某种原因jdbcTemplate无法执行查询操作,我希望它释放连接。下面是我在启用调试日志后从log4j获得的代码、数据源详细信息和日志语句。获取JDBC连接后不会记录任何内容 SqlRowSet oRs =

我对SpringJDBCTemplate有问题。它以前工作正常,但现在不返回任何值,也不返回错误消息。我的表已经变得相当大,大约有3500万条记录,这可能是一个原因

但我主要担心的是jdbcTemplate不会引发任何异常,也不会将控件释放到下一行代码,这样我的应用程序就会中断。 如果由于某种原因jdbcTemplate无法执行查询操作,我希望它释放连接。下面是我在启用调试日志后从log4j获得的代码、数据源详细信息和日志语句。获取JDBC连接后不会记录任何内容

SqlRowSet oRs = jdbcTemplate.queryForRowSet(strSql, new Object[] { Integer.valueOf(1) });
数据源配置

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd ">

    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
        <property name="driverClassName" value="com.mysql.jdbc.Driver" />
        <property name="url" value="jdbc:mysql://localhost:4928/dbtest" />
        <property name="username" value="root" />
        <property name="password" value="" />
        <property name="removeAbandoned" value="true" />
        <property name="initialSize" value="3" />
        <property name="maxActive" value="10" />
    </bean>
    <bean id="transactionManager"
        class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource">
            <ref local="dataSource" />
        </property>
    </bean>
    <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
        <property name="dataSource" ref="dataSource" />
    </bean>
    <bean id="sendMail" class="com.app.SendMails">
        <property name="jdbcTemplate" ref="jdbcTemplate" />
    </bean>
    <bean id="response" class="com.app.BuildResponses">
        <property name="jdbcTemplate" ref="jdbcTemplate" />
    </bean>
</beans>

非常感谢任何帮助

可能是JDBC连接池已耗尽,线程正在等待连接吗?您是否有使用相同数据源的其他线程或事务

要检查连接池是否耗尽,请添加

<property name="maxWait" value="1000"/>
到您的数据源bean定义。如果在1秒1000毫秒的超时时间内无法分配连接,则会出现异常


BasicDataSource在从池借用连接时将永远等待,除非指定超时。

您是否能够连接其他SQL客户端(例如命令行客户端)?是。我应该提到这一点。我的其他查询在到达这一行失败的代码之前执行良好。请尝试将maxActive属性增加到100。在这种情况下,您的初始连接可能由JDBC进行测试连接和/或其他查询。看看情况是否如此。我还建议您分块获取数据,这样就不会花费太多时间获取数据。谢谢。今晚我将尝试此解决方案。我将maxWait添加到属性。这个问题仍然存在。我假设连接在这里不是问题,它能够连接,但执行查询需要时间。我添加了jdbcTemplate.setQueryTimeout3,但没有帮助。我担心的是,在获取JDBC连接后,jdbcTemplate没有记录任何内容。然后,我会调试有问题的代码部分,并使用调试器深入研究Spring的jdbcTemplate代码,以检测JDBC模板中的哪个方法被阻塞。谢谢。我试试。我也有同样的问题。它在我的开发环境中工作。但在UAT设置中不工作。开发环境为windows,UAT为Linux。
<property name="maxWait" value="1000"/>