最近完成了一个小项目,本来是用mysql数据库的,但客户要求要用oracle,没办法只能重新做了。
原先在mysql项目中使用的数据源是c3p0,没有出现什么问题,但移植到oracle就存在有时会连接不上数据库,总是报流已关闭的错误,改了参数了不行,不知道是不是驱动的问题.最后决定用proxool试一下.目前还没发现什么问题
下载:Proxool ,http://sourceforge.net/projects/proxool ,我下的是proxool-0.9.1版本.
下面是我的配置:
1.在hibernate平级目录下创建Proxool.xml
<?xml version="1.0" encoding="UTF-8"?>
<something-else-entirely>
<proxool>
<alias>DBPool</alias>
<driver-url>jdbc:oracle:thin:@192.168.1.100:1521:ORCL</driver-url>
<driver-class>oracle.jdbc.driver.OracleDriver</driver-class>
<driver-properties>
<property name="user" value="scott"/>
<property name="password" value="tiger"/>
</driver-properties>
<house-keeping-test-sql>select sysdate from dual</house-keeping-test-sql>
<house-keeping-sleep-time>90000</house-keeping-sleep-time>
<maximum-new-connections>20</maximum-new-connections>
<prototype-count>5</prototype-count>
<maximum-connection-count>100</maximum-connection-count>
<minimum-connection-count>10</minimum-connection-count>
</proxool>
</something-else-entirely>
说明: 最好不要在代码上作注释,听说会有问题,但没遇过。
<alias>: 给连接池取一个别名,在hibernate配置文件中将引用这个别名。
<house-keeping-test-sql>: 如果发现了空闲的数据库连接.house keeper 将会用这个语句来测试.这个语句最好非常快的被执行.如果没有定义,测试过程将会被忽略。 如果是mysql 可以用select CURRENT_DAT作为查询语句.
<house-keeping-sleep-time>:house keeper 保留线程处于睡眠状态的最长时间,house keeper 的职责就是检查各个连接的状态,并判断是否需要销毁或者创建,这个的默认值是30秒。
<maximum-connection-count>:大的数据库连接数。
<maximum-new-connections>:因未有空闲连接可以分配而在队列中等候的最大请求数,超过这个请求数的用户连接就不会被接受。
<prototype-count>: 最少保持的空闲连接数。
2.hibernate.cfg.xml中的配置
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<!-- Generated by MyEclipse Hibernate Tools.-->
<hibernate-configuration>
<session-factory>
<property name="myeclipse.connection.profile">oracle5</property>
<property name="connection.driver_class">
oracle.jdbc.driver.OracleDriver
</property>
<property name="connection.url">
jdbc:oracle:thin:@192.168.1.100:1521:ORCL
</property>
<property name="connection.username">scott</property>
<property name="connection.password">tiger</property>
<property name="dialect">org.hibernate.dialect.Oracle9Dialect</property>
<property name="hibernate.connection.provider_class">
org.hibernate.connection.ProxoolConnectionProvider
</property>
<property name="hibernate.proxool.pool_alias">DBPool</property>
<property name="hibernate.proxool.xml">Proxool.xml</property>
<!-- 设置二级缓存插件EHCache的Provider类 -->
<property name="hibernate.cache.provider_class">
org.hibernate.cache.EhCacheProvider
</property>
<!-- 启用查询缓存 -->
<property name="hibernate.cache.use_query_cache">false</property>
<mapping resource="com/agency/ORM/Logs.hbm.xml" />
</session-factory>
</hibernate-configuration>