嘚啵嘚嘚啵嘚.
---幸運皮
我想來想去,還是要說一下問題出現的情景,吼吼~
本來運行不錯,後來老師跟我說,每次早上去上班訪問網站的時候就會出現這個問題,重啟一下tomcat就好了,等第二天就又出現這樣的問題.
後來我查了一下,原來是資料庫連接逾時的問題,但是,第一次改好後,我以為改好了,因為要等一天的時間(至少是8個小時)去驗證呢,結果,過了兩天,老師來郵件說,不行,還是那樣.
後來,我就納悶了,怎麼驗證好了之後再去給老師呢...
後來,在網上一篇文章上說到了修改系統時間,哦哦哦,原來可以這樣,所以,這次用修改系統時間的方式來驗證了一下,成功了,然後再給老師.
ok,囉嗦完了.
上次好像說到了用修改資料庫系統參數的方式來解決長時間不串連出現的問題,但是,那並不是根本的解決方式.在網上查了一下,原來可以用資料庫連接池來解決這個問題,這可是從根本上的解決.
這位大神:http://blog.csdn.net/isnotsuitable/article/details/6990505 總結了一下,hibernate支援的串連池有這幾個:
1.DriverManagerConnectionProvider:代表由Hibernate提供的預設的資料庫連接池
2.C3P0ConnectionProvider:代表C3P0串連池
3.ProxoolConnectionProvider:代表Proxool串連池
4.DBCPConnectionProvider:代表DBCP串連池
而文檔中推薦的是用C3P0,所以就按照這種方式解決:
步驟如下:
步驟一:
匯入C3P0.jar.
步驟二:
在hibernate.cfg.xml中添加C3P0的配置:
<!-- 配置串連池 --><property name="hibernate.connection.provider_class"> org.hibernate.connection.C3P0ConnectionProvider </property> <property name="c3p0.acquire_increment">1</property> <property name="c3p0.idle_test_period">300</property> <property name="c3p0.max_size">20</property> <property name="c3p0.max_statements">100</property> <property name="c3p0.min_size">5</property> <property name="c3p0.timeout">90</property> <property name="c3p0.preferredTestQuery ">select 1 from user where id=1</property> <property name="c3p0.idleConnectionTestPeriod ">18000</property> <property name="c3p0.maxIdleTime">25000</property> <property name="c3p0.testConnectionOnCheckout">true</property>
hibernate.cfg.xml檔案:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"><hibernate-configuration><session-factory><!-- 配置事務實現方式 --><property name="transaction.factory_class">org.hibernate.transaction.JDBCTransactionFactory</property><!-- 配置JDBC裡batch的大小 --><property name="jdbc.batch_size">50</property><property name="cache.use_second_level_cache">false</property><!-- 配置安全執行緒的session --><property name="current_session_context_class">thread</property><!-- 顯示SQL --><property name="show_sql">false</property><property name="format_sql">false</property><!-- 設定資料庫方言 --><property name="dialect">org.hibernate.dialect.MySQLDialect</property><!-- 設定資料庫串連 --><property name="connection.driver_class">com.mysql.jdbc.Driver</property><property name="connection.username">root</property><property name="connection.password">111111</property><property name="connection.url">jdbc:mysql://localhost:3306/alumnus</property><!-- 配置串連池 --><property name="hibernate.connection.provider_class"> org.hibernate.connection.C3P0ConnectionProvider </property> <property name="c3p0.acquire_increment">1</property> <property name="c3p0.idle_test_period">300</property> <property name="c3p0.max_size">20</property> <property name="c3p0.max_statements">100</property> <property name="c3p0.min_size">5</property> <property name="c3p0.timeout">90</property> <property name="c3p0.preferredTestQuery ">select 1 from user where id=1</property> <property name="c3p0.idleConnectionTestPeriod ">18000</property> <property name="c3p0.maxIdleTime">25000</property> <property name="c3p0.testConnectionOnCheckout">true</property> <!-- 指定hibernate管理的對應檔 --><mapping resource="com/alumnus/data/Users.hbm.xml" /><mapping resource="com/alumnus/data/Alumnus.hbm.xml" /><mapping resource="com/alumnus/data/Register.hbm.xml" /></session-factory></hibernate-configuration>
這樣,就不會再出現錯誤啦.