我遇到了 spring jdbcTemplate 的问题。它曾经工作正常,但现在它不返回任何值,也不返回错误消息。我的表大小变得相当大,大约有 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>
日志:
DEBUG [org.springframework.jdbc.datasource.DataSourceUtils] - Executing prepared SQL statement
DEBUG [org.springframework.jdbc.datasource.DataSourceUtils] - Fetching JDBC Connection from DataSource
如有任何帮助,我们将不胜感激
难道是JDBC连接池已经耗尽,线程正在等待连接?您是否有其他线程或事务使用相同的数据源?
检查连接池是否耗尽添加
<property name="maxWait" value="1000"/>
到您的 dataSource bean 定义。如果无法在 1 秒(1000 毫秒)超时内分配连接,您将收到异常。
BasicDataSource 在从池中借用连接时会永远等待,除非您指定超时。