Hibernate4 + Spring3 整合,配置sessionFactory时,需要注入dataSource,否则报错。sessionFactory配置如下:
<!-- 配置SessionFactory -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<property name="configLocation">
<value>classpath:config/hibernate.cfg.xml</value>
</property>
<property name="dataSource" ref="dataSource" />
<!-- 简化注册hbm.xml文件 -->
<property name="packagesToScan">
<list>
<value>com.ys.entity</value>
</list>
</property>
</bean>
我测试的几种配置数据源的方式:
(1)JDBC
(2)proxool——直接配置
(3)proxool——采用proxool.xml配置
(4)proxool——引入jdbc.properties配置
下面来分别介绍:
(1)JDBC
<!-- JDBC -->
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" />
<property name="url" value="jdbc:oracle:thin:@192.168.24.23:1521:orcl" />
<property name="username" value="yao" />
<property name="password" value="yao" />
</bean>
(2)proxool——直接配置
proxool-0.9.1.jar和spring3整合时,不支持把用户名和密码配置在spring配置文件中,可采用后面两种方式实现。
<!-- Proxool直接配置 -->
<bean id="dataSource" class="org.logicalcobwebs.proxool.ProxoolDataSource">
<property name="alias" value="proxoolDataSource" />
<property name="driver" value="oracle.jdbc.driver.OracleDriver" />
<property name="driverUrl" value="jdbc:oracle:thin:@192.168.24.23:1521:orcl" />
<property name="user" value="yao" />
<property name="password" value="yao" />
最少保持的空闲连接数(默认2个)
<property name="prototypeCount" value="2" />
最大连接数(默认5个)
<property name="maximumConnectionCount" value="5" />
最小连接数(默认2个)
<property name="minimumConnectionCount" value="2" />
最大活动时间(超过此时间线程将被kill,默认5分钟)
<property name="maximumActiveTime" value="300000" />
同时最大连接数
<property name="simultaneousBuildThrottle" value="3" />
</bean>
(3)proxool——采用proxool.xml配置
<!-- 采用proxool.xml配置 -->
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="org.logicalcobwebs.proxool.ProxoolDriver" />
<property name="url" value="proxool.db12" />
</bean>
proxool.xml
<?xml version="1.0" encoding="UTF-8"?>
<proxool-config>
<proxool>
<alias>db12</alias>
<driver-url>jdbc:oracle:thin:@192.168.24.23:1521:orcl</driver-url>
<driver-class>oracle.jdbc.driver.OracleDriver</driver-class>
<driver-properties>
<property name="user" value="yao" />
<property name="password" value="yao" />
</driver-properties>
<prototype-count>2</prototype-count>
<maximum-connection-count>5</maximum-connection-count>
<minimum-connection-count>2</minimum-connection-count>
<maximum-new-connections>5</maximum-new-connections>
<house-keeping-sleep-time>60000</house-keeping-sleep-time>
<test-before-use>true</test-before-use>
<house-keeping-test-sql>select sysdate from dual</house-keeping-test-sql>
</proxool>
</proxool-config>
(4)proxool——引入jdbc.properties配置
<!-- 引入jdbc.properties文件 -->
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>classpath:config/jdbc.properties</value>
</list>
</property>
</bean>
<bean id="dataSource" class="org.springframework.jdbc.datasource.LazyConnectionDataSourceProxy">
<property name="targetDataSource">
<bean class="org.logicalcobwebs.proxool.ProxoolDataSource">
<property name="driver" value="${jdbc.driverClassName}" />
<property name="driverUrl" value="${jdbc.url}" />
<property name="user" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}"></property>
<property name="maximumConnectionCount" value="${proxool.maxConnCount}" />
<property name="minimumConnectionCount" value="${proxool.minConnCount}" />
<property name="simultaneousBuildThrottle" value="${proxool.simultaneousBuildThrottle}" />
<property name="statistics" value="${proxool.statistics}" />
<property name="trace" value="${proxool.trace}" />
</bean>
</property>
</bean>
上面只介绍了采用JDBC和proxool配置数据源。
常用的数据库连接池管理工具有:c3p0,dbcp和proxool,我们还可以采用c3p9和dbcp来配置数据源。
网上的评价是:
c3p0比较耗费资源,效率方面可能要低一点。
dbcp在实践中存在BUG,在某些种情会产生很多空连接不能释放,Hibernate3.0已经放弃了对其的支持。
proxool的负面评价较少,现在比较推荐它,而且它还提供即时监控连接池状态的功能,便于发现连接泄漏的情况。