hibernate默认连接池存在过期连接无法释放的问题及解决方法。
2009-06-17 08:22
579 查看
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里增加:
<!-- 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
解决方法:
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里增加:
<!-- 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
相关文章推荐
- 解决Mysql连接池被关闭 ,hibernate尝试连接不能连接的问题。 (默认mysql连接池可以访问的时间为8小时,如果超过8小时没有连接,mysql会自动关闭连接池。
- 统计器程序中连接池无法释放的问题解决方法
- 解决Mysql连接池被关闭 ,hibernate尝试连接不能连接的问题。 (默认mysql连接池可以访问的时间为8小时,如果超过8小时没有连接,mysql会自动关闭连接池。系统发布第二天访问链接关闭问题。
- Windows2003无法连接远程桌面问题 解决方法!
- 微信开发学习 问题1: 网页授权问题 “该连接无法访问” 解决方法
- MySQL 6.0 默认无法远程连接的解决方法
- linux JDK 安装无法建立连接的问题解决 wget方法后面再说
- Json lib 对于hibernate的懒加载的存在问题的解决方法
- Linux中无法远程连接数据库问题的解决方法
- 使用PLSQL Developer时,“ORA-12154: TNS:无法解析指定的连接标识符”问题的解决方法
- 在启用sharepoint portal server 2003的SSO时,提示“无法连接到数据库服务器,请检查配置账户的权利”的问题的解决方法
- JSP在tomcat服务器下无法连接MySql问题解决方法
- 解决利用hibernate连接mysql时无法插入汉字的问题
- 关于HibernateDaoSupport getSession()不能释放资源的问题及解决方法
- 记一次ASP.NET无法连接数据库问题的解决方法(ORA-01017)
- hibernate+spring 连接无法自动关闭解决方法
- hibernate+spring 连接无法自动关闭解决方法
- Asp.Net 应用程序在IIS发布后无法连接oracle数据库问题的解决方法
- PDA访问web service时,“无法连接到远程服务器”问题的解决方法
- Android模拟器中无法连接网络的问题解决方法