我有一个似乎工作正常的spring应用程序,除了在5-6个请求之后,它停止并且无法处理任何新的传入请求。
我的页面有一个选择下拉列表,并且该下拉列表的onChange会对spring服务器进行ajax调用。在大约5或6个之后,不再接受,刷新页面会无限期地挂起。
知道可能导致这种情况的原因吗?如果您需要有关配置文件等的更多信息,请告诉我,但我希望这是一个常见的问题,我可以指向正确的方向。
由于
修改
这是我的ajax代码,名为onChange
$.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并且jus在浏览器中反复点击刷新,它也会失败。
通过进一步测试,当我点击不需要数据库连接的映射时,问题不会发生,所以它可能与我的hibernate池配置有关吗?如果我刷新一个需要数据库连接的页面,问题就会出现在第10个请求上。这是我的hibernate 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如下
<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次。我不知道如何判断请求是否正在命中服务器,因为我至少知道映射没有被命中。
答案 0 :(得分:2)
您的数据库连接处理可能有问题。他们可能不会被送回游泳池。确保关闭所有连接。