【发布时间】:2016-09-09 11:57:54
【问题描述】:
我的 Spring MVC JDBC 调用有问题。如果我在启动服务器后快速拨打电话,则 JDBC 连接会在一秒钟内建立并检索数据。类似地,如果其他 DAO 彼此快速连续地被调用,那么很快就会建立连接。但是,如果我尝试在几分钟后调用 DAO,则 JDBC 连接需要永远完成。它卡在了
“DataSourceUtils:110 - 从数据源获取 JDBC 连接”
我从来没有耐心真正检查检索连接需要多长时间,但我已经等了 10 分钟,但没有任何迹象表明正在建立连接。
接下来,我至少尝试重新启动服务器。但是 JDBC 甚至会阻止服务器的停止!!控制台卡在这一行:
“DisposableBeanAdapter:327 - 在名为 'dataSource' 的 bean 上调用销毁方法 'close'”
最终我重新启动了 Eclipse,它可以正常工作,直到再次出现时间间隔。
这是我对数据源的 bean 定义:
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url" value="url" />
<property name="username" value="abc" />
<property name="password" value="abc" />
<property name="validationQuery" value="SELECT 1" />
<property name="testWhileIdle" value="true" />
<property name="maxActive" value="100" />
<property name="minIdle" value="10" />
<property name="initialSize" value="10" />
<property name="maxIdle" value="20" />
<property name="maxWait" value="1000" />
</bean>
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource" />
</bean>
<bean id="getDataDao" class="com.project.dao.GetDataDao">
<constructor-arg index="0" ref="jdbcTemplate" />
<constructor-arg index="1" value="STORED_PROC_NAME"></constructor-arg>
</bean>
在我的 DAO 文件中,我扩展了 Spring 的 StoredProcedure 类,这是构造函数:
public GetDataDao(JdbcTemplate jdbcTemplate, String spName) {
super(jdbcTemplate, spName);
declareParameter(new SqlParameter("p_input", Types.VARCHAR));
declareParameter(new SqlOutParameter("o_result", Types.VARCHAR));
compile();
}
在另一个函数中,这就是我调用 SP 的方式:
spOutput = super.execute(spInput);
其中spOutput 和spInput 是HashMap。
我的配置有问题吗? TIA。
【问题讨论】:
-
不在你的配置中,我怀疑在你的代码中......不要自己建立连接并使用弹簧管理的事务。如果你不这样做,你的池最终会用完可用的连接。在您的情况下,大约 100 个请求后(除非您将 MySQL 配置为禁止这些连接)。
-
Eclipse 与此无关。我不明白为什么人们在遇到问题时会提到他们的 IDE。 Spring 每天都在我的应用程序中正确执行此操作;它在你的代码中。
-
修改您的问题并发布您获取和使用连接的代码。
-
我怀疑 Eclipse 是否相关。您可以通过关闭 Eclipse、在本地将 WAR 部署到 Tomcat 并启动它来证明这一点。如果行为仍然存在,则不涉及 Eclipse。
-
正是我的观点。 Eclipse 不相关。
标签: java spring-mvc jdbc