Hibernate MySql 连接池隔天断开

网站今天放到服务器上好好的,过一天就不能访问数据库了,重启一下tomcat就好了,网上找了说是MySQL对所有连接的有效时间默认为28800秒,正好8小时,高手请帮忙,最... 网站今天放到服务器上好好的,过一天就不能访问数据库了,重启一下tomcat就好了,网上找了说是MySQL对所有连接的有效时间默认为28800秒,正好8小时,高手请帮忙,最好有实例,谢谢!在线等待
这样不是解决问题的办法啊,还有没有再好一点的办法了
展开
 我来答
mrajian
2010-07-15 · TA获得超过1979个赞
知道小有建树答主
回答量:191
采纳率:100%
帮助的人:150万
展开全部
楼主描述正是MySQL8小时问题,这个问题还是比较容易解决的。
楼主用的连接池是C3P0吗?这里我以C3P0连接池为例来说明问题原因和解决方法。
问题原因:MySQL默认是自动关闭空闲超过8小时的连接,而C3P0并不知道该connection已经失效,如果这时有Client请求connection,C3P0将该失效的Connection提供给Client,将会造成异常。重启Tomcat操作会使C3P0重新建立和数据库的连接池,且池内的连接都是有效的连接。
解决方法:c3p0要在8小时内关闭不使用的连接。这需要修改其中的一些配置参数,主要是maxIdleTime和idleConnectionTestPeriod。这两个参数的值要小于28800秒。
建议配置如下:
<!-- 每次都验证连接是否可用 -->
<property name="hibernate.c3p0.validate">true</property>
<!-- 检查连接池中所有空闲连接的间隔时间,单位为秒(要注意的是MySQL的自动关闭空闲超过8小时连接的机制) -->
<property name="hibernate.c3p0.idle_test_period">18000</property>
<!-- 连接的最大空闲时间,25000秒内未使用则连接被丢弃。单位为秒(要注意的是MySQL的自动关闭空闲超过8小时连接的机制) -->
<property name="hibernate.c3p0.timeout">25000</property>

附上在 hibernate中配置c3p0的关键字。

c3p0.acquireIncrement hibernate.c3p0.acquire_increment
c3p0.idleConnectionTestPeriod hibernate.c3p0.idle_test_period
c3p0.maxIdleTime hibernate.c3p0.timeout
c3p0.maxPoolSize hibernate.c3p0.max_size
c3p0.maxStatements hibernate.c3p0.max_statements
c3p0.minPoolSize hibernate.c3p0.min_size
sd1992585
2010-07-09 · TA获得超过278个赞
知道小有建树答主
回答量:130
采纳率:0%
帮助的人:74.8万
展开全部

不使用hibernate本身的连接池,采用c3p0连接池。

到了 Hibernate 3 默认第三方的连接池管理,

由 Apache 的 DBCP 项目更换成了 c3p0 项目。

它的属性在 Hibernate 配置属性有对应的写法,如:

c3p0.maxIdleTime = hibernate.c3p0.timeout

c3p0.maxPoolSize = hibernate.c3p0.max_size

所以,要修改一下 hibernate.cfg.xml 文档

将 Hibernate 默认连接池参数

<property name="connection.pool_size">5</property>

删除或注释掉,Hibernate 默认连接池比较初级。

然后,加入以下属性

<property name="hibernate.c3p0.timeout">1800</property>

<property name="hibernate.c3p0.max_size">5</property>

就可以使用 c3p0 来管理连接池了。

其实这些属性的参数名都可以在 Hibernate 文档 3.3 节

JDBC connections 里面找到。

按照相应的格式更改名字和值就可以了。

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
vinson_shen
2010-07-09 · TA获得超过2503个赞
知道小有建树答主
回答量:960
采纳率:100%
帮助的人:0
展开全部
是的,你去my.ini或my.cnf里的节点[mysqld]下增加参数:

interactive_timeout=28800

wait_timeout=28800

重启mysql服务

这样不是解决问题的办法啊,还有没有再好一点的办法了
-------------
我公司很多项目用Hibernat连接池都是这样解决的.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
鄞晟赵妙芙
2020-03-06 · TA获得超过3963个赞
知道大有可为答主
回答量:3222
采纳率:27%
帮助的人:444万
展开全部
楼主描述正是MySQL8小时问题,这个问题还是比较容易解决的。
楼主用的连接池是C3P0吗?这里我以C3P0连接池为例来说明问题原因和解决方法。
问题原因:MySQL默认是自动关闭空闲超过8小时的连接,而C3P0并不知道该connection已经失效,如果这时有Client请求connection,C3P0将该失效的Connection提供给Client,将会造成异常。重启Tomcat操作会使C3P0重新建立和数据库的连接池,且池内的连接都是有效的连接。
解决方法:c3p0要在8小时内关闭不使用的连接。这需要修改其中的一些配置参数,主要是maxIdleTime和idleConnectionTestPeriod。这两个参数的值要小于28800秒。
建议配置如下:
<!--
每次都验证连接是否可用
-->
<property
name="hibernate.c3p0.validate">true</property>
<!--
检查连接池中所有空闲连接的间隔时间,单位为秒(要注意的是MySQL的自动关闭空闲超过8小时连接的机制)
-->
<property
name="hibernate.c3p0.idle_test_period">18000</property>
<!--
连接的最大空闲时间,25000秒内未使用则连接被丢弃。单位为秒(要注意的是MySQL的自动关闭空闲超过8小时连接的机制)
-->
<property
name="hibernate.c3p0.timeout">25000</property>
附上在
hibernate中配置c3p0的关键字。
c3p0.acquireIncrement
hibernate.c3p0.acquire_increment
c3p0.idleConnectionTestPeriod
hibernate.c3p0.idle_test_period
c3p0.maxIdleTime
hibernate.c3p0.timeout
c3p0.maxPoolSize
hibernate.c3p0.max_size
c3p0.maxStatements
hibernate.c3p0.max_statements
c3p0.minPoolSize
hibernate.c3p0.min_size
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式