我在Spring项目中有以下数据库配置 -
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<property name="driverClassName" value="${db.driver}" />
<property name="url" value="${db.jdbc.url}" />
<property name="username" value="${db.user}" />
<property name="password" value="${db.password}" />
<property name="maxActive" value="75" />
<property name="initialSize" value="10" />
<property name="testOnBorrow" value="true" />
<property name="validationQuery" value="SELECT 1" />
<property name="maxWait" value="10000"></property>
</bean>
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"
autowire="byName">
<property name="dataSource">
<ref local="dataSource" />
</property>
</bean>
应用程序运行一段时间(30分钟到2小时,它会有所不同),一段时间后它会开始挂起。即浏览器一直等待服务器响应。在检查日志时,我发现应用程序挂起了数据库查询 -
01/22 16:56:03 3024208 [http-bio-8080-exec-2] DEBUG DEBUG org.springframework.jdbc.core.JdbcTemplate - Executing prepared SQL statement [SELECT * FROM mytable where id = ?]
与数据库的连接是正确的,因为我能够与它进行交互并从命令行或mysql工作台运行查询。
可能是问题的根源是什么?在这一点上,我完全不知道应该向哪个方向看,因为没有异常被抛出并且没有堆栈跟踪。你会用什么方法来解决这个问题?
答案 0 :(得分:0)
您是否尝试在应用程序挂起时创建线程转储? 如果您使用的是Linux,可以尝试:
$ kill -3 <pid>
将线程转储写入标准输出。它可能会记录在控制台或/ logs / stdout或/logs/catalina.out。
中