求救啊,sqlserver2005连接已关闭,但tomcat仍然使用该连接,导致查询报错

系统用的spring-mvc框架,使用tomcat7启动服务时会自动创建10个数据库连接,且系统登陆验证操作每次都使用连接10(原理我也不了解),但是过一段时间,数据库连... 系统用的spring-mvc框架,使用tomcat7启动服务时会自动创建10个数据库连接,且系统登陆验证操作每次都使用连接10(原理我也不了解),但是过一段时间,数据库连接会逐渐自动断掉几个,如果不幸10号连接断了,系统就不能登陆了,日志里就会记下这样的错误
com.microsoft.jdbc.SQLServerException: Connection reset by peer: socket write error
实在是不知道为什么,应该不是空闲时间的原因,因为配置文件里有设maxIdle=10
求大神能帮我想想办法啊,能解决问题就行,改sqlserver或者改tomcat都行啊
问题补充:数据源应该算配了吧,在applicationContext.xml中有
<bean id="datasource" class=org.apache.tomcat.jdbc.pool.DataSource" destory-method="close">,要检测连接的有效性怎么配置呢?是不是
<property name="testOnBrorrow" value="true" />
<property name="validationQuery" value="select 1" />
<property name="validationInterval" value="30000" />
展开
 我来答
吉他man0
2014-05-09 · 超过27用户采纳过TA的回答
知道答主
回答量:54
采纳率:0%
帮助的人:40.9万
展开全部
这个SqlServer我不怎么用(一起搞.net的时候用过一阵子),但是我在用mysql的时候也出现过类似的我称之为8小时的问题。
你用hibernate的时候可以配置数据源的,如果没有配的话那么hibernate自己会有一个数据源,就是这个数据源导致了时间一长就会抛异常。
因为mysql的默认连接时间是8小时,如果八小时内没有使用已经建立的连接那么就会自动断开这个连接。
而hibernate自带的数据源一旦创建好了连接池以后就不会去判断是否连接任然有效,他会认为连接还在,其实已经不再了,因此用老的连接就会异常。
估计SqlServer也有这个问题。建议你给hibernate配置一下数据源(并在其中声明要检测连接的有效性)
追问
麻烦您看下我的问题补充,因为太长不能追问,谢谢
追答
这个org.apache.tomcat.jdbc.pool.DataSource
数据源没有用过,我一般用c3p0或者dbcp这些,c3p0中每次验证连接是否可用是:
true
你要非要用org.apache.tomcat.jdbc.pool.DataSource
的话就查一下文档吧。
不过很重要的一点是用数据源必须告诉hibernate:
org.hibernate.connection.c3p0ConnectionProvider
如果是spring管理的话就在sessionFactory这个bean中加一个属性

应该就可以了吧,祝你好运!
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式