1、做了個后台編輯系統,上傳到服務器后正常使用,但是第二天卻出現了如下的問題,
經過查詢資料知道了是數據庫連接池的問題。
按照網上網友的說法,運行一個系統,測試沒有問題,然后把本地時間更改到后天,再次運行就報這個錯誤了!(首先啟動tomcat,打開其中的一個系統,比如students, 運行無誤,可以登錄系統,把系統時間設置為1天后,再次打開, 就出現了上面圖片中的錯 誤,親自試一下就是這樣子滴,別忘了打開tomcat就OK)。
Hibernate支持如下的連接池:
DriverManagerConnectionProvider:代表由Hibernate提供的默認的數據庫連接池
C3P0ConnectionProvider:代表C3P0連接池
ProxoolConnectionProvider:代表Proxool連接池
DBCPConnectionProvider:代表DBCP連接池
DatasourceConnectionProvider:代表在受管理環境中由容器提供的數據源
默認連接池並不支持在分配一個連接時,測試其有效與否的功能,而C3P0、Proxool、DBCP都提供了這樣的功能,正好可以解決上述問題,在這里我們使用c3p0來解決。
在hibernate.cfg.xml文件里面加入如下的配置:
<property name="hibernate.connection.provider_class">
org.hibernate.connection.C3P0ConnectionProvider
</property>
<!-- 最大連接數 -->
<property name="hibernate.c3p0.max_size">20</property>
<!-- 最小連接數 -->
<property name="hibernate.c3p0.min_size">5</property>
<!-- 獲得連接的超時時間,如果超過這個時間,會拋出異常,單位毫秒 -->
<property name="hibernate.c3p0.timeout">120</property>
<!-- 最大的PreparedStatement的數量 -->
<property name="hibernate.c3p0.max_statements">100</property>
<!-- 每隔120秒檢查連接池里的空閑連接 ,單位是秒-->
<property name="hibernate.c3p0.idle_test_period">120</property>
<!-- 當連接池里面的連接用完的時候,C3P0一下獲取的新的連接數 -->
<property name="hibernate.c3p0.acquire_increment">2</property>
<!-- 每次都驗證連接是否可用 -->
<property name="hibernate.c3p0.validate">true</property>
<!--每*秒檢查所有連接池中的空閑連接。Default: 0 -->
<property name="c3p0.idleConnectionTestPeriod ">18000</property>
<!--最大空閑時間,*秒內未使用則連接被丟棄。若為0則永不丟棄。Default: 0 -->
<property name="c3p0.maxIdleTime">25000</property>