
开发环境是用SqlServer 2008 , jdbc版本是jtds 12发布到测试环境的时候,出现连接超时的问题。
测试环境配置如下:
tomcat 625
sqlserver jdbc4
阿里云rds sql server 2008 sp2
你指的是JDBC连接池连接超时失效问题的问题吧?
这是因为mysql默认保持连接的时间是8小时,如果这个连接在8小时内无人访问的话,就会关闭这个连接。但是连接池设计的时候没有考虑到这个问题,还把失效的连接拿出去就会导致出现异常。
解决方法:
1、创建一个线程每隔一段时间就测试一下连接,保持连接时最新的,永远达不到8小时无人访问。
2、连接池取连接的时候判定是否这个连接有效。
[java] view plain copy
if (connisValid(1000)){
return conn;
}
else{
return thisCreateConnection();
}
3、不使用连接池,直接拿了就用,用了就还。
连接池的概念:
用池来管理Connection,这可以重复使用Connection。有了池,所以我们就不用自己来创建Connection,而是通过池来获取Connection对象。当使用完Connection后,调用Connection的close()方法也不会真的关闭Connection,而是把Connection“归还”给池。池就可以再利用这个Connection对象了。
JDBC数据库连接池接口(DataSource):
Java为数据库连接池提供了公共的接口:javaxsqlDataSource,各个厂商可以让自己的连接池实现这个接口。这样应用程序可以方便的切换不同厂商的连接池!
与具体数据库管理系统种类有关。通常考虑以下因素:
1 防火墙是否拦截了相应端口,如SQL Server的1433、MySQL的3306、Oracle的5021、DB2的50000等,据本人经验,使用数据库时尽量不要用360监控;
2 如果是JDBC,相应的驱动程序是否已经放到了项目中,版本是否正确;
3 如果是ODBC,是否驱动损坏(可以用Windows系统盘修复)
Druid连接池及监控在Spring配置如下:
[html] view plaincopy
<bean id="dataSource" class="comalibabadruidpoolDruidDataSource" init-method="init" destroy-method="close">
<!-- 基本属性 url、user、password -->
<property name="url" value="${jdbc_url}" />
<property name="username" value="${jdbc_user}" />
<property name="password" value="${jdbc_password}" />
<!-- 配置初始化大小、最小、最大 -->
<property name="initialSize" value="1" />
<property name="minIdle" value="1" />
<property name="maxActive" value="20" />
<!-- 配置获取连接等待超时的时间 -->
<property name="maxWait" value="60000" />
<!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 -->
<property name="timeBetweenEvictionRunsMillis" value="60000" />
<!-- 配置一个连接在池中最小生存的时间,单位是毫秒 -->
<property name="minEvictableIdleTimeMillis" value="300000" />
<property name="validationQuery" value="SELECT 'x'" />
<property name="testWhileIdle" value="true" />
<property name="testOnBorrow" value="false" />
<property name="testOnReturn" value="false" />
<!-- 打开PSCache,并且指定每个连接上PSCache的大小 -->
<property name="poolPreparedStatements" value="true" />
<property name="maxPoolPreparedStatementPerConnectionSize" value="20" />
<!-- 配置监控统计拦截的filters,去掉后监控界面sql无法统计 -->
<property name="filters" value="stat" />
</bean>
2 只要配置initialSize,maxActive就可以,目前这样的配置已经能够使用连接池,加入其实配置性能不好,官方文档里也不没加其它属性,连接池jar包免费下载。
数据库连接数的,所有的连接数都是有连接池管理的,有时候连不上有时候连不上是因为连接池有时候满了,有的时候没有满,可以提供连接数,连接池可以理解为线程池,是需要释放的,所以java中关于jdbc配置会配置超时时间
以上就是关于Sql Server 2008 连接超时全部的内容,包括:Sql Server 2008 连接超时、JDBC连接池的问题。 请问在什么情况下,会出现这种问题啊 找了好久,找不到原因......、数据库连接建立失败原因等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)