hibernate的資料庫連線池技術
最為常見的三種JDBC連線池技術為Proxool,C3P0和DBCP技術。
Hibernate官方宣佈DBCP由於Bug太多而不再支援。推薦使用Proxool or C3P0.
Proxool技術在Hibernate中的配置如下:
1.建立一個xml檔案proxool.xml。路徑在src下。hibernate.cfg.xml也是
<?xml version="1.0" encoding="UTF-8" ?>
<something-else-entirely>
<proxool>
<alias>myProxool</alias>這個別名要與hibernate.cfg.xml中的hibernate.proxool.pool_alias要保持一致
<driver-url>*******</driver-url>即資料庫的url。各個資料庫不同的
<driver-class>****</driver-class>資料庫的驅動類
<driver-properties>有兩個屬性。user和password
<property name="user" value=""/>
<property name="password" value=""/>
</driver-properties>
<house-keeping-test-sql></house-keeping-test-sql>如有空閒連線。house keeper用該語句測試。
<house-keeping-sleep-time></house-keeping-sleep-time>house keeper保留執行緒處於睡眠狀態的最長時間。house keeper就是檢查資料庫各個連線的狀態,判斷是否需要銷燬或建立
<simultaneous-build-throttle>20</simultaneous-build-throttle> 可一次建立的最大連線數
<maximum-connection-count>100</maximum-connection-count> 最大資料庫連線數
<minimum-connection-count>10</minimum-connection-count> 最小資料庫連線數
<maximum-connection-lifetime>3600000</maximum-connection-lifetime>執行緒的最大壽命週期
</proxool>
</something-else-entirely>
2.hibernate.cfg.xml中配置連線池相關
<hibernate-configuration>
<session-factory>
<property name="hibernate.proxool.pool_alias">myProxool</property>
<property name="hibernate.proxool.xml">proxool.xml</property>
<property name="hibernate.connection.provider_class">org.hibernate.connection.ProxoolConnectionProvider</property>
<property name="hibernate.proxool.existing_pool">true</property>
<property name="dialect"></property>
<property name="hibernate.cache.use_query_cache">true</property>
</session-factory>
</hibernate-configuration>
</session-factory>
</hibernate-configuration>
3配置web.xml中的servlet
<servlet>
<servlet-name>ServletConfigurator</servlet-name>
<servlet-class>org.logicalcobwebs.proxool.configuration.ServletConfigurator</servlet-class>
<init-param>
<param-name>xmlFile</param-name>
<param-value>/WEB-INF/classes/proxool.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
注意:如果同時配置了web.xml和hibernate.cfg.xml會產生錯誤:
org.logicalcobwebs.proxool.ProxoolException: Parsing failed.
因為同名的proxool連線池已經啟動,而hibernate開始執行時會自己啟動關聯的proxool連線池.
所以此時應改變hibernate.cfg.xml配置為:
<property name="hibernate.proxool.existing_pool">true</property>
</servlet>
c3p0的配置(實現了資料來源和JNDI繫結,支援JDBC3規範和JDBC2的標準擴充套件)
- <!-- 配置連線池 -->
- <propertyname="c3p0.max_size">2</property>
- <propertyname="c3p0.min_size">2</property>
- <propertyname="c3p0.timeout">5000</property>
- <propertyname="c3p0.max_statements">100</property>
- <propertyname="c3p0.idle_test_period">3000</property>
- <propertyname="c3p0.acquire_increment">2</property>
- <propertyname="c3p0.validate">false</property>