Hibernate用Mysql数据库时链接关闭异常的解决

前一段时间朋友用hibernate+mysql整了一个应用,出现tomcat放一夜,mysql连接出现错误的情况,具体的错误信息忘记了。

在网上查找一下,找到了这个帖子,还有就是这个了;原来Mysql在经过8小时不使用后会自动关闭已打开的连接,摘录原文如下:

5.4.

I have a servlet/application that works fine for a day, and then stops working overnight

MySQL closes connections after 8 hours of inactivity. You either need to use a connection pool that handles stale connections or use the "autoReconnect" parameter (see "Developing Applications with MySQL Connector/J").

Also, you should be catching SQLExceptions in your application and dealing with them, rather than propagating them all the way until your application exits, this is just good programming practice. MySQL Connector/J will set the SQLState (see java.sql.SQLException.getSQLState() in your APIDOCS) to "08S01" when it encounters network-connectivity issues during the processing of a query. Your application code should then attempt to re-connect to MySQL at this point.

现把具体方法贴出来,以供大家共享.
方法一:
               设置你的MYSQL数据库:wait_timeout=24*60*60<秒>,把它的值设置大一点,呵呵
 方法二:
               配置Hibernate C3p0连接池,配置如下:
<property name="connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property>
   <property name="c3p0.max_size">20</property>
   <property name="c3p0.min_size">5</property>
   <property name="c3p0.timeout">20</property>
   <property name="c3p0.max_statements">100</property>
   <property name="c3p0.idle_test_period">120</property>
   <property name="c3p0.acquire_increment">2</property>

注意这里标红的部分,要设置c3p0.timeout的值小于MySql的wait_timeout的值,这样才行,要不还会出现异常.

这次是一个教训,所以不论从稳定还是性能的考虑,都应该选择相对更加成熟的连接池。

你可能感兴趣的:(sql,tomcat,Hibernate,mysql,servlet)