mysql在启动后,如果一段时间内没有活动,那么将自动关闭该连接。这段时间,默认为8小时。在spring+hibernate中解决该问题,应该使用proxool这个连接池来代替DBCP的连接池。因为DBCP连接池没有自动重连功能。修改applicationContext.xml:
< bean id ="dataSource" class ="org.logicalcobwebs.proxool.ProxoolDataSource" destroy-method ="close" >
         < property name ="driver" >
             < value >com.mysql.jdbc.Driver value >
         property >
         < property name ="driverUrl" >
             < value >jdbc:mysql://host:3306/dbname?user=root&password=pass value >
         property >
         < property name ="user" >
             < value >root value >
         property >
         < property name ="password" >             < value >pass value >
         property >
         < property name ="alias" >
             < value >mysql value >
         property >
         < property name ="prototypeCount" >
             < value >5 value >
         property >
         < property name ="maximumConnectionCount" >
             < value >100 value >
         property >
         < property name ="minimumConnectionCount" >
             < value >2 value >
         property > 
          < property name ="houseKeepingTestSql" > 
             < value >SELECT CURRENT_DATE value > 
           property >            
         < property name ="testBeforeUse" >
             < value >true value >
         property >
         < property name ="testAfterUse" >
             < value >true value >
         property >
         < property name ="trace" >
             < value >true value >
         property >
     bean >
 
在上面的代码中,
< property name ="testBeforeUse" >
     < value >true value >
property >
用来指定在使用连接之前要进行测试。
 
< property name ="houseKeepingTestSql" >
     < value >SELECT CURRENT_DATE value >
property >
用来指定测试连接所使用的SQL语句。
如果测试发现连接已经close,那么将自动重建连接。
 
然后从 [url]http://proxool.sourceforge.net/download.html[/url]下载proxool的ZIP包。本地解压之后,拷贝proxool-version.jar和proxool-cglib.jar到/WEB-INF/lib下即可。