经过一个周末的折腾,终于找到了hibernate中使用数据库连接池的解决方案。
从网上google了一下,发现大致有三种可以实施的解决方案:
1、使用hibernate自带的连接池;
2、使用c3po包的连接池功能;
3、使用Proxool包的连接池功能;
第一种方案,就是在myeclipse产生的hibernate.cfg.xml中添加一个属性:
<property name="connection.pool_size">20</property>
第二种方案是:
<property name="myeclipse.connection.profile">test</property>
<property name="connection.driver_class">com.microsoft.jdbc.sqlserver.SQLServerDriver</property>
<property name="connection.url">jdbc:microsoft:sqlserver://localhost:1433;databasename=test</property>
<property name="connection.username">sa</property>
<property name="connection.password">123</property>
<property name="c3p0.min_size">2</property>
<property name="c3p0.max_size">10</property>
<property name="c3p0.timeout">1800</property>
<property name="c3p0.acquireRetryAttempts">4</property>
<property name="c3p0.acquireIncrement">1</property>
<property name="c3p0.idleConnectionTestPeriod">36000</property>
<property name="c3p0.initialPoolSize">2</property>
<property name="c3p0.maxPoolSize">10</property>
<property name="c3p0.maxIdleTime">1200</property>
<property name="c3p0.maxStatements">30</property>
<property name="c3p0.minPoolSize">2</property>
<property name="connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property>
第三中方案是Proxool:
在hibernate.cfg.xml中添加:
<!-- Proxool Database connection settings -->
<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>
<property name="dialect">org.hibernate.dialect.SQLServerDialect</property>
<property name="show_sql">false</property>
然后再添加一个Proxool.xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<!-- the proxool configuration can be embedded within your own application's.
Anything outside the "proxool" tag is ignored. -->
<something-else-entirely>
<proxool>
<alias>DBPool</alias>
<driver-url>jdbc:microsoft:sqlserver://localhost:1433;databasename=test</driver-url>
<driver-class>com.microsoft.jdbc.sqlserver.SQLServerDriver</driver-class>
<driver-properties>
<property name="user" value="sa"/>
<property name="password" value="123"/>
</driver-properties>
<maximum-connection-count>10</maximum-connection-count>
</proxool>
</something-else-entirely>
这个三种方案,我都可以配置成功,可是,郁闷的是,这三种方案,都比我不用连接池的数据要慢,可能是我的测试不准确吧?我只做了连续100000次的数据插入操作。
从网上google了一下,发现大致有三种可以实施的解决方案:
1、使用hibernate自带的连接池;
2、使用c3po包的连接池功能;
3、使用Proxool包的连接池功能;
第一种方案,就是在myeclipse产生的hibernate.cfg.xml中添加一个属性:
<property name="connection.pool_size">20</property>
第二种方案是:
<property name="myeclipse.connection.profile">test</property>
<property name="connection.driver_class">com.microsoft.jdbc.sqlserver.SQLServerDriver</property>
<property name="connection.url">jdbc:microsoft:sqlserver://localhost:1433;databasename=test</property>
<property name="connection.username">sa</property>
<property name="connection.password">123</property>
<property name="c3p0.min_size">2</property>
<property name="c3p0.max_size">10</property>
<property name="c3p0.timeout">1800</property>
<property name="c3p0.acquireRetryAttempts">4</property>
<property name="c3p0.acquireIncrement">1</property>
<property name="c3p0.idleConnectionTestPeriod">36000</property>
<property name="c3p0.initialPoolSize">2</property>
<property name="c3p0.maxPoolSize">10</property>
<property name="c3p0.maxIdleTime">1200</property>
<property name="c3p0.maxStatements">30</property>
<property name="c3p0.minPoolSize">2</property>
<property name="connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property>
第三中方案是Proxool:
在hibernate.cfg.xml中添加:
<!-- Proxool Database connection settings -->
<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>
<property name="dialect">org.hibernate.dialect.SQLServerDialect</property>
<property name="show_sql">false</property>
然后再添加一个Proxool.xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<!-- the proxool configuration can be embedded within your own application's.
Anything outside the "proxool" tag is ignored. -->
<something-else-entirely>
<proxool>
<alias>DBPool</alias>
<driver-url>jdbc:microsoft:sqlserver://localhost:1433;databasename=test</driver-url>
<driver-class>com.microsoft.jdbc.sqlserver.SQLServerDriver</driver-class>
<driver-properties>
<property name="user" value="sa"/>
<property name="password" value="123"/>
</driver-properties>
<maximum-connection-count>10</maximum-connection-count>
</proxool>
</something-else-entirely>
这个三种方案,我都可以配置成功,可是,郁闷的是,这三种方案,都比我不用连接池的数据要慢,可能是我的测试不准确吧?我只做了连续100000次的数据插入操作。