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