我有一个似乎工作正常的 Spring 应用程序,除了在 5-6 个请求之后,它停止并且无法处理任何新的传入请求。
我的页面有一个选择下拉列表,并且该下拉列表的 onChange 对 spring 服务器进行 ajax 调用。在大约 5 或 6 个之后,不再接受,刷新页面无限期挂起。
知道可能是什么原因造成的吗?如果您需要有关配置文件等的更多信息,请告诉我,但我希望这是一个足够常见的问题,可以指出正确的方向。
谢谢
编辑
这是我的名为 onChange 的 ajax 代码
$.ajax({
url: "./service.go?data="+data+",
dataType:"json",
timeout:15000,
cache: false,
success: function(data){
...
},
error: function(request,cause,data){
if (cause ==="timeout"){
alert("Request timed out!");
}
else{
alert("ERROR: " + data.responseText);
}
}
});
但是,我认为这不是问题,因为即使我根本不使用 ajax 并且只是在浏览器中一遍又一遍地刷新,它也会失败。
通过进一步测试,当我遇到不需要数据库连接的映射时,问题不会发生,所以它可能与我的休眠池配置有关?如果我刷新需要数据库连接的页面,则问题始终出现在第 10 个请求上。这是我的休眠 c3p0 配置
driverClassName=com.sybase.jdbc3.jdbc.SybDriver
url=jdbc: HIDDEN
username=
password=
# Number of Connections a pool will try to acquire upon startup
initialPoolSize=5
# Minimum number of Connections a pool will maintain at any given time
minPoolSize=1
# Maximum number of Connections a pool will maintain at any given time
maxPoolSize=20
# Connections to acquire when the pool is exhausted
acquireIncrement=5
# Seconds a Connection can remain pooled but unused before being discarded. 30 Min Check
maxIdleTime=1800
#Test all idle, pooled but unchecked-out connections, every this number of seconds
idleConnectionTestPeriod=300
并使用这些属性我定义我的池豆如下
<bean id="dsrc" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="${driverClassName}" />
<property name="jdbcUrl" value="${url}" />
<property name="user" value="${username}" />
<property name="password" value="${password}" />
<property name="initialPoolSize" value="${initialPoolSize}" />
<property name="minPoolSize" value="${minPoolSize}" />
<property name="maxPoolSize" value="${maxPoolSize}" />
<property name="acquireIncrement" value="${acquireIncrement}" />
<property name="maxIdleTime" value="${maxIdleTime}" />
<property name="idleConnectionTestPeriod" value="${idleConnectionTestPeriod}" />
</bean>
这是我的控制器中的简单功能,直到他第 10 次
@RequestMapping(method = RequestMethod.GET, value = "/test")
public @ResponseBody String test(){
System.out.println("Hello");
//List<Object> objects = objectService.getObjects(station); // calls hibernate DAO and when this is used instead of system.out, halts after 10th call.
return "";
}
所以我知道它由于打印输出而击中控制器,直到第 10 次。我不确定此后如何判断请求是否命中服务器,因为我知道至少映射没有命中。