hibernate连接池:hibernate默认连接池存在过期连接无法释放的问题及解决思路方法

  hibernate默认连接池有个问题不会自动检测数据库连接是否断开MYSQL数据库段时间(大约8小时)没有访问就会断开连接连接池里连接却还是存在下次访问hibernate会继续使用这个连接导致数据库连接异常由于该问题需要在服务器长时间运行时才会出现所以在平时测试很难发现

  解决思路方法:

  1.在连接参数中使用autoReconnect以后次执行失败后会自动重新连接

  2.通过把服务器上Mysql"wait_timeout"属性设置高点

  3.不使用Hibernate内置连接池改用C3P0连接池这个连接池会自动处理数据库连接被关闭情况要使用C3P0很简单先从Hibernate里把c3p0-0.8.3.jar复制到项目lib目录中再在hibernate.properties里去掉hibernate.c3p0开头那些属性注释(使用缺省值或自己需要数值)这样 Hibernate就会自动使用C3P0代替内置连接池了c3p0为open sourceJDBC连接池随hibernate起发布c3p0连接池配置非常简单只需要在hibernate.cfg.xml里增加: 

        <!-- configuration pool -->
        <property name="c3p0.acquire_increment">1</property>
        <property name="c3p0.idle_test_period">100</property> <!-- seconds -->
        <property name="c3p0.max_size">5</property>
        <property name="c3p0.max_statements">0</property>
        <property name="c3p0.min_size">2</property>
        <property name="c3p0.timeout">90</property> <!-- seconds -->


  另外还需要在CLASS_PATH里加上c3p0-x.x.x.jar文件(x.x.x为版本号)c3p0-x.x.x.jar文件随hibernate起发布你可以在其lib目录下找到该文件

  配置好的后hibernate便会自动使用c3p0连接池:C3P0ConnectionProvider

Tags:  连接池 释放oracle连接池 连接池释放 hibernate连接池

延伸阅读

最新评论

发表评论