SS2H + c3p0连接池 程序在运行一段时间后 就会出现无法连接数据库的错误

SS2H + c3p0连接池 程序在运行一段时间后 就会出现无法连接数据库的错误,第1张

您好,发现了问题,我首先在c3p0上加上 调试信息的配置 :

c3p0.debugUnreturnedConnectionStackTraces=true

c3p0.unreturnedConnectionTimeout=90 (我的连接超时时间是60s,所以这设置了90s)

applicationContext数据源配置增加响应配置

<property name="breakAfterAcquireFailure" value="${c3p0.breakAfterAcquireFailure}" />

<property name="testConnectionOnCheckout" value="${c3p0.testConnectionOnCheckout}" />

果然发现很多未回收的连接,正常情况下超时未回收的连接会有一些,但是不会这么多啊。

经查资料在hibernate sessionFacory中增加配置(http://hi.baidu.com/austincao/item/fc9907da3d854e44fa576861)

Spring3.1去掉了HibernateDaoSupport类。hibernate4需要通过getCurrentSession()获取session。 并且设置

<prop key="hibernate.current_session_context_class">org.springframework.orm.hibernate4.SpringSessionContext</prop>

在Spring @Transactional声明式事务管理,”currentSession”的定义为: 当前被 Spring事务管理器 管理的Session,此时应配置:

hibernate.current_session_context_class=org.springframework.orm.hibernate4.SpringSessionContext。

另外在hibernate中使用 sessionFactory.getCurrentSession()获取session时,需要为方法声明事务,为此将sqlserver。

MySQL服务器默认的空闲时间超过8个小时,MySQL将自动断开该连接,而连接池却认为该连接还是有效的,当应用申请使用该连接时,就会报错:Communications link failure,The last packet successfully received from the server was *** millisecond ago.The last packet successfully sent to the server was *** millisecond ago。

如果你使用的是hibernate,需要修改连接池的设置,因为 hibernate自带的连接池性能很差,可以使用C3P0,然后配置:

<property name="automaticTestTable">test</property>

c3p0将建一张名为Test的空表,并使用其自带的查询语句进行测试。如果定义了这个参数那么 属性preferredTestQuery将被忽略。你不能在这张Test表上进行任何 *** 作,它将只供c3p0测试使用。

$ORACLE_HOME/jdbc/lib/classes12.jar复制到,相应的应用路径下,或者在环境变量中CLASSPATH里面直接写上这个文件classes12.jar的全路径$ORACLE_HOME/jdbc/lib/classes12.jar。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/6839015.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-29
下一篇 2023-03-29

发表评论

登录后才能评论

评论列表(0条)

保存