我的Blog我做主^_^

走向一条通往JAVA的不归路...

  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  64 随笔 :: 68 文章 :: 77 评论 :: 0 Trackbacks

前一段时间朋友用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的值,这样才行,要不还会出现异常.

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



posted on 2007-05-23 10:52 java_蝈蝈 阅读(948) 评论(0)  编辑  收藏

只有注册用户登录后才能发表评论。


网站导航:
博客园   IT新闻   Chat2DB   C++博客   博问