1. 程式人生 > >在spring+hibernate中以dataSource方式使用proxool連線池

在spring+hibernate中以dataSource方式使用proxool連線池

可以使用proxool包中的org.logicalcobwebs.proxool.ProxoolDataSource類來作為資料來源提供給hibernate。配置如下:

<bean id="dataSource" class="org.logicalcobwebs.proxool.ProxoolDataSource">
   <property name="alias">
    <value>spring</value>
   </property>
   <property name="driver">
    <value>com.mysql.jdbc.Driver</value>
   </property>
   <property name="driverUrl">
    <value>jdbc:mysql://localhost:3306/dbname?useUnicode=true&amp;characterEncoding=UTF-8&amp;user=u&amp;password=p</value>
   </property>
   <property name="user">
    <value>whatever</value>
   </property>
   <property name="password">
    <value>doesntmatter</value>
   </property>
</bean>

hibernate中配置直接使用該資料來源即可。這裡只簡單的配置了驅動名稱和連線串,其它特性可以參考ProxooolDataSource類的相關屬性進行配置。

注意:使用者名稱和密碼需要寫在連線串裡面。ProxoolDataSource類提供的user,password屬性似乎沒有什麼用。無論提供什麼,它都會以空使用者名稱、密碼去連線資料庫。我用的是RC0.93,這可能是Proxool的一個bug。但是配置中這兩個屬性還必須設定,否則hibernate會報空指標錯誤。估計作為hibernate的資料來源必須有user和passowrd屬性吧。 :-(

另外,當我使用hibernate讀取proxool配置檔案方式的時候,自動提交會被設定成false。好像也沒有可以修改的地方,難道又是bug?鬱悶!

附:hibernate讀取proxool配置檔案方式

proxool配置檔案(faq中的例子):

<?xml version="1.0" encoding="ISO-8859-1"?>
<!-- the proxool configuration can be embedded within your own application's.
Anything outside the "proxool" tag is ignored. -->
<something-else-entirely>
   <proxool>
     <alias>xml-test</alias>
     <driver-url>jdbc:hsqldb:.</driver-url>
     <driver-class>org.hsqldb.jdbcDriver</driver-class>
     <driver-properties>
       <property name="user" value="sa"/>
       <property name="password" value=""/>
     </driver-properties>
     <maximum-connection-count>10</maximum-connection-count>
     <house-keeping-test-sql>select CURRENT_DATE</house-keeping-test-sql>
   </proxool>
</something-else-entirely>

在hibernateProperties配置中增加:

<prop key="hibernate.proxool.xml">proxool.xml</prop> <!-- proxool配置檔案,注意路徑 -->
<prop key="hibernate.proxool.pool_alias">xml-test</prop> <!-- 別名要和proxool配置中的相一致 -->
<prop key="connection.provider_class">org.hibernate.connection.ProxoolConnectionProvider</prop> <!-- 這個好像不配也沒關係 -->