Hibernate默认连接池使用问题

转载地址:http://blog.163.com/yf_198407/blog/static/513854112011102034713409/

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 source的JDBC连接池,随hibernate一起发布。c3p0连接池的配置非常简单,只需要在hibernate.cfg.xml里增加: 

DE>        <!-- 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 --> 
DE>

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

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值