1. 程式人生 > >hibernate的資料庫連線池技術

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的標準擴充套件)

  1. <!-- 配置連線池 -->
  2. <propertyname="c3p0.max_size">2</property>
  3. <propertyname="c3p0.min_size">2</property>
  4. <propertyname="c3p0.timeout">5000</property>
  5. <propertyname="c3p0.max_statements">100</property>
  6. <propertyname="c3p0.idle_test_period">3000</property>
  7. <propertyname="c3p0.acquire_increment">2</property>
  8. <propertyname="c3p0.validate">false</property>