日期:2014-05-17  浏览次数:20694 次

这是个什么问题,求解啊,每次,重启服务器就好了,过几个小时又这样了!






服务器

------解决方案--------------------
是 mysql 数据库吧?
MySQL 对所有连接的有效时间默认为 28800 秒,正好 8 小时,也就是说,如果一个连接 8 小时没有请求和操作,就会自动断开(即使修改了 MySQ L连接的有效时间,问题在这里无法得到根本解决);而 Hibernate 中并没有配置连接池,使用的是它自带的也就是 DriverManagerConnectionProvider。而这个连接池不支持在分配一个连接时,测试其有效与否的功能(不过根据异常提示可以再 Jdbc 连接的 URL 中加入属性'autoReconnect=true'),因此这个连接池并不知道它所管理的连接中是否有被 MySQL 断开的。如果一个程序要使用数据库连接,而 Hibernte 的连接池分配一个已经被 MySQL 断开了的给程序使用,那么便会出现错误。
首先导入 C3P0 的 Jar 包(c3p0.jar),再在 Hibernate 配置中加入:
<property name="hibernate.connection.provider_class">
               org.hibernate.connection.C3P0ConnectionProvider
            </property>
            <property name="c3p0.acquire_increment">1</property>
            <property name="c3p0.idle_test_period">300</property>
            <property name="c3p0.max_size">20</property>
           <property name="c3p0.max_statements">100</property>
            <property name="c3p0.min_size">5</property>
            <property name="c3p0.timeout">90</property>
            <property name="c3p0.preferredTestQuery ">select 1 from user where id=1</property>
            <property name="c3p0.idleConnectionTestPeriod ">18000</property>           
           <property name="c3p0.maxIdleTime">25000</property>         
           <property name="c3p0.testConnectionOnCheckout">true</property>