Spring 3 Hibernate 3.0 annotation proxool连接池配置
由于Hibernate自带的链接池效率低效,并且有很多bug.所以官方并不推荐使用,推荐使用诸如proxool的连接池来代替Hibernate。
该配置方法是由Spring来接管proxool连接池,不用额外增加Hibernate配置文件,以及数据库与持久对象的映射文件(使用注解的方式)。
PS: 不要忘记将Hibernate库的 lib/optional/proxool文件夹中的proxool*.jar 加入到classpath中,否则无法找到proxool Connection Provider class.
Spring的配置文件( applicationContext.xml )如下:
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd"> <context:component-scan base-package="com.baidu"/> <bean id="sessionFactory class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"> <description>Annotation Hibernate from proxool </description> <property name="packageToScan"> <value>com.baidu.model</value> </property> <property name="hibernateProperties"> <props> <prop key="hibernate.proxool.xml">proxool.xml</prop> <!-- 在与该文件相同目录下建立proxool.xml 文件 --> <prop key="hibernate.proxool.pool_alias>dbpool</prop> <!-- 必须保证该处的别名与proxool.xml文件中声明的相同 --> <prop key="hibernate.cglib.use_reflection_optimizer>true</prop> <prop key="hibernate.connection.release_mode">auto</prop> <!-- 必须保证该选项为true,保证连接池的效率 --> <prop key="hibernate.show_sql">true</prop> <prop key="hibernate.connection.provider_class">org.hibernate.connection.ProxoolConnectionProvider</prop> </props> </property> </bean> <bean id="txManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager" p:sessionFactory-ref="sessionFactory"> </bean> <tx:annotation-driven transaction-manager="txManager"/> </beans>
与该文件对应的proxool文件如下:
<?xml version="1.0" encoding="UTF-8"?> <something-else-entirely> <proxool> <alias>dbpool</alias> <!-- 与上文的database alias定义的相同 --> <driver-url>jdbc:mysql://localhost:3306/springdemo</driver-url> <!-- 根据自己使用的数据库的类别来修改 --> <driver-class>com.mysql.jdbc.Driver</driver-class> <driver-properties> <property name="user" value="root"/> <property name="password" value="root"/> </driver-properties> <house-keeping-sleep-time>30</house-keeping-sleep-time> <maximum-connection-count>1000</maximum-connection-count> <minimum-connection-count>10</minimum-connection-count> <simultaneous-build-throttle>100</simultaneous-build-throttle> </proxool> </something-else-entirely>
该文件的设置比较简单,一般都能够通过英文理解字面上的意思。
最后有兴趣的可以在Web.xml文件中添加监控链接,加入监控页面观察加入连接池之后,所带来的连接数据库上的时间和资源消耗对比。这里的教程网上有很多。不过最简单的方法是通过下载一个GUI来观测。不用额外的代码和配置。MySQL,可以使用MySQL Administer以上内容转自:http://www.cnblogs.com/papertigerv5/archive/2011/11/04/2235919.html
总结:
1.添加proxool-0.9.1.jar到lib下面
2.新建proxool.xml
3.修改spring的applicationContext.xml添加下面的代码:
<prop key="hibernate.proxool.xml">proxool.xml</prop> <!-- 在与该文件相同目录下建立proxool.xml 文件 -->
<prop key="hibernate.proxool.pool_alias">DBPool</prop> <!-- 必须保证该处的别名与proxool.xml文件中声明的相同 -->
<prop key="hibernate.cglib.use_reflection_optimizer">true</prop>
<prop key="hibernate.connection.release_mode">auto</prop> <!-- 必须保证该选项为true,保证连接池的效率 -->
<prop key="hibernate.connection.provider_class">org.hibernate.connection.ProxoolConnectionProvider</prop>
<!-- 配置hibernate属性 --> <property name="hibernateProperties"> <props> <prop key="hibernate.proxool.xml">proxool.xml</prop> <!-- 在与该文件相同目录下建立proxool.xml 文件 --> <prop key="hibernate.proxool.pool_alias">DBPool</prop> <!-- 必须保证该处的别名与proxool.xml文件中声明的相同 --> <prop key="hibernate.cglib.use_reflection_optimizer">true</prop> <prop key="hibernate.connection.release_mode">auto</prop> <!-- 必须保证该选项为true,保证连接池的效率 --> <prop key="hibernate.connection.provider_class">org.hibernate.connection.ProxoolConnectionProvider</prop> <!-- 是否在后台显示sql,开发中显示,上线后关闭 --> <prop key="hibernate.show_sql">true</prop> <!-- 是否生成hibernate统计 --> <prop key="hibernate.generate_statistics">false</prop> <prop key="hibernate.connection.SetBigStringTryClob">true</prop> <!-- <prop key="hibernate.jdbc.batch_size">0</prop> --> </props> </property>