在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&characterEncoding=UTF-8&user=u&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> <!-- 這個好像不配也沒關係 -->