`
JavaCrazyer
  • 浏览: 3008699 次
  • 性别: Icon_minigender_1
  • 来自: 河南
社区版块
存档分类

HIbernate温习(2)--连接池配置总结基于第三方c3p0和proxool

阅读更多

       一直都在用连接池技术,也是个好习惯,但用连接池技术必须要明白,为什么要为数据库加上连接池

数据库连接池概述: 
    数据库连接是一种关键的有限的昂贵的资源,这一点在多用户的网页应用程序中体现得尤为突出。对数据库连接的管理能显著影响到整个应用程序的伸缩性和健壮性,影响到程序的性能指标。数据库连接池正是针对这个问题提出来的。

    数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而再不是重新建立一个;释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏。这项技术能明显提高对数据库操作的性能。 
数据库连接池在初始化时将创建一定数量的数据库连接放到连接池中,这些数据库连接的数量是由最小数据库连接数来设定的。无论这些数据库连接是否被使用,连接池都将一直保证至少拥有这么多的连接数量。连接池的最大数据库连接数量限定了这个连接池能占有的最大连接数,当应用程序向连接池请求的连接数超过最大连接数量时,这些请求将被加入到等待队列中。数据库连接池的最小连接数和最大连接数的设置要考虑到下列几个因素: 
    1)最小连接数是连接池一直保持的数据库连接,所以如果应用程序对数据库连接的使用量不大,将会有大量的数据库连接资源被浪费; 
    2)最大连接数是连接池能申请的最大连接数,如果数据库连接请求超过此数,后面的数据库连接请求将被加入到等待队列中,这会影响之后的数据库操作。 
    3)如果最小连接数与最大连接数相差太大,那么最先的连接请求将会获利,之后超过最小连接数量的连接请求等价于建立一个新的数据库连接。不过,这些大于最小连接数的数据库连接在使用完不会马上被释放,它将被放到连接池中等待重复使用或是空闲超时后被释放。 




Hibernate支持第三方的连接池,

官方推荐的连接池是C3P0,Proxool,以及DBCP。在配置连接池时需要注意的有三点:

一、Apche的DBCP在Hibernate2中受支持,但在Hibernate3中已经不再推荐使用,官方的解释是这个连接池存在缺陷。如果你因为某种原因需要在Hibernate3中使用DBCP,建议采用JNDI方式。

二、默认情况下(即没有配置连接池的情况下),Hibernate会采用内建的连接池。但这个连接池性能不佳,且存在诸多BUG(笔者就曾在Mysql环境下被八小时连接悬空问题困扰过),因此官方也只是建议仅在开发环境下使用。


三、Hibernate2和Hibernate3的命名空间有所变化。例如,配置C3P0时的provider_class有Hibernate2环境下使用net.sf.hibernate.connection.C3P0ConnectionProvider,在Hibernate3环境下使用org.hibernate.connection.C3P0ConnectionProvider。

下面是Hibernate环境下几种常见的连接池配置:

1Hibernate默认连接池

<?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">

<hibernate-configuration>

<session-factory >

<!—JDBC驱动程序-->

<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<!-- 连接数据库的URL-->

<property name="connection.url"> 

jdbc:mysql://localhost:3306/schoolproject

</property>

<property name="connection.useUnicode">true</property>

<property name="connection.characterEncoding">UTF-8</property>

<!--连接的登录名-->

<property name="connection.username">root</property>

<!—登录密码-->

<property name="connection.password"></property>

<!--是否将运行期生成的SQL输出到日志以供调试-->

<property name="show_sql">true</property>

<!--指定连接的语言-->

<property name="dialect">org.hibernate.dialect.MySQLDialect</property>

<!--映射Student这个资源-->

<mapping resource="com/wqbi/model/pojo/student.hbm.xml" />
</session-factory> 
</hibernate-configuration>

 



2C3P0连接配置

<?xml version='1.0' encoding='UTF-8'?>

<!DOCTYPE hibernate-configuration

PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN"

"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<hibernate-configuration>

<session-factory >

<!—JDBC驱动程序-->
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<!-- 连接数据库的URL-->
<property name="connection.url"> 
jdbc:mysql://localhost:3306/schoolproject</property>
<property name="connection.useUnicode">true</property>
<property name="connection.characterEncoding">UTF-8</property>
<!--连接的登录名-->
<property name="connection.username">root</property>
<!--登录密码-->
<property name="connection.password"></property>


<!-- C3P0连接池设定-->

<property name="hibernate.connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property>
		<!--连接池的最小连接数--> 
		<property name="hibernate.c3p0.min_size">5</property>
		<!--最大连接数--> 
		<property name="hibernate.c3p0.max_size">30</property>
		<!--连接超时时间-->
        <property name="hibernate.c3p0.timeout">1800</property>
        <!--statemnets缓存大小--> 
        <property name="hibernate.c3p0.max_statements">100</property>
        <!--每隔多少秒检测连接是否可正常使用 ;最后在网上找到一个办法。为hibernate配置连接池,推荐用c3p0,然后配置c3p0的反空闲设置idle_test_period,(只要小于MySQL的wait timeout即可,这句话后经证实不一定)。 --> 
        <property name="hibernate.c3p0.idle_test_period">121</property>
        <!--当池中的连接耗尽的时候,一次性增加的连接数量,默认为3--> 
        <property name="hibernate.c3p0.acquire_increment">1</property>
        <property name="hibernate.c3p0.validate">true</property>
<!--是否将运行期生成的SQL输出到日志以供调试-->
<property name="show_sql">true</property>
<!--指定连接的语言-->
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<!--映射Student这个资源-->
<mapping resource="com/wqbi/model/pojo/student.hbm.xml" />
</session-factory> 
</hibernate-configuration>

 



3proxool连接池

(1) 先写proxool的配置文件,文件名:proxool.xml(一般放在与hibernate.cfg.xml文件在同一个目录中)本例配置的是MYSQL数据库,数据库的名字为schoolproject

<?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>

<!--proxool只能管理由自己产生的连接-->

<driver-url>

jdbc:mysql://localhost:3306/schoolproject?useUnicode=true&amp;characterEncoding=UTF8

</driver-url>

<!—JDBC驱动程序-->

<driver-class>com.mysql.jdbc.Driver</driver-class>

<driver-properties>

<property name="user" value="root"/>

<property name="password" value=""/>

</driver-properties> 

<!-- proxool自动侦察各个连接状态的时间间隔(毫秒),侦察到空闲的连接就马上回

收,超时的销毁--> 

<house-keeping-sleep-time>90000</house-keeping-sleep-time>

<!-- 指因未有空闲连接可以分配而在队列中等候的最大请求数,超过这个请求数的

用户连接就不会被接受--> 

<maximum-new-connections>20</maximum-new-connections>

<!-- 最少保持的空闲连接数--> 

<prototype-count>5</prototype-count>

<!-- 允许最大连接数,超过了这个连接,再有请求时,就排在队列中等候,最大的

等待请求数由maximum-new-connections决定--> 

<maximum-connection-count>100</maximum-connection-count>

<!-- 最小连接数-->

<minimum-connection-count>10</minimum-connection-count>

</proxool> 

</something-else-entirely>

 

(2)配置hibernate.cfg.xml文件

<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE hibernate-configuration
PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory >
<property name="hibernate.connection.provider_class">
org.hibernate.connection.ProxoolConnectionProvider
</property>
<property name="hibernate.proxool.pool_alias">DBPool</property>
<property name="hibernate.proxool.xml">proxoolconf.xml</property>
<!--是否将运行期生成的SQL输出到日志以供调试-->
<property name="show_sql">true</property>
<!--指定连接的语言-->
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<!--映射Student这个资源-->
<mapping resource="com/wqbi/model/pojo/student.hbm.xml" />
</session-factory> 
</hibernate-configuration>

 


(1) hibernate.connection.provider_class定义Hibernate的连接加载类,这里Proxool连接池是用这个,不同的连接池有不同的加载类,可以查阅Hibernate文档获取相关信息

(2) hibernate.proxool.pool_alias这里就是用我们上面提到的连接池的别名

(3) hibernate.proxool.xml是向Hibernate声明连接池的配置文件位置,可以用相对或绝对路径,用相对路径时要注意一定在要Path范围内!不然会抛出异常。

(4) dialect是声明SQL语句的方言

(5) show_sql定义是否显示Hibernate生成的SQL语言,一般在调试阶段设为true,完成后再改成false,这样有利于调试。

(6) <mapping >资源文件映射


4JNDI连接池,数据源已经由应用服务配置好(Web服务器)Hibernate需要做的只是通过JNDI名查找到此数据源。应用服务器将连接池对外显示为JNDI绑定数据源,它是javax.jdbc.Datasource类的一个实例。只要配置一个Hibernate文件,如:

hibernate.connection.datasource=java:/comp/env/jdbc/schoolproject //JNDI名

hibernate.transaction.factory_class = org.hibernate.transaction.JTATransactionFactory
hibernate.transaction.manager_loopup_class =
org.hibernate.transaction.JBossTransactionManagerLookup
hibernate.dialect=org.hibernate.dialect.MySQLDialect

 

 

2
0
分享到:
评论
2 楼 JavaCrazyer 2010-11-12  
C3P0完全OK
1 楼 Javakeith 2010-11-12  
到底用那个连接比较好呢?
比如门户网站的访问量大,
管理系统访问量小,该如何分配呢?
LZ给点建议!

相关推荐

    HIbernate连接池配置总结基于第三方c3p0和proxool

    2. **Hibernate支持的第三方连接池** - **C3P0**:由M-Fabrice提供的开源连接池实现,具备自动检测死锁、空闲连接回收等特性。 - **Proxool**:Apache的一个项目,提供监控和统计功能,可动态调整连接池大小。 - ...

    hibernate3+ proxool-0.9.1配置 和proxool-0.9.1.jar

    标题中的“hibernate3+ proxool-0.9.1配置”涉及到的是在Java开发中,使用Hibernate3 ORM框架与Proxool连接池的整合配置。Hibernate3是一款流行的持久层框架,它允许开发者用面向对象的方式来操作数据库,而Proxool...

    Hibernate Proxool连接池配置总结及常遇问题

    **Hibernate Proxool连接池配置详解** 在Java应用程序中,数据库连接池是管理数据库连接的一种高效方式,它可以显著提升系统性能,减少数据库资源的浪费。本文将深入探讨Hibernate与Proxool连接池的配置,以及在...

    在Hibernate中配置Proxool连接池

    在上述配置中,我们通过`hibernate.proxool.properties`指定了Proxool的配置文件路径,`hibernate.proxool.pool_alias`设置了连接池的别名,这个别名需要与Proxool配置文件中的alias一致。 接下来,我们需要创建...

    Hibernate2和Hibernate3连接池配置.doc

    本文将详细讲解Hibernate2和Hibernate3中如何配置连接池,以及官方推荐的C3P0、Proxool和DBCP等连接池的使用。 首先,我们需要了解的是,Hibernate2和Hibernate3对连接池的支持有所不同。在Hibernate2中,Apache的...

    proxool连接池配置详解

    Proxool是一个开源的轻量级Java数据库连接池实现,其主要目标是替代常见的数据库连接池解决方案,如C3P0或DBCP,并且提供了更加灵活和易于配置的特性。在实际应用中,合理配置Proxool可以显著提高系统的性能和稳定性...

    proxool连接池配置

    -- 连接池的别名 --&gt; &lt;alias&gt;DBPool&lt;/alias&gt; - &lt;!-- proxool只能管理由自己产生的连接 --&gt; &lt;driver-url&gt;jdbc:sqlserver://localhost:1433;dataBaseName=books&lt;/driver-url&gt; - &lt;!-- JDBC驱动程序 --&gt; ...

    hibernate-proxool-4.3.1.Final.zip

    【标题】"hibernate-proxool-4.3.1.Final.zip" 提供的是一个集成Hibernate ORM框架与Proxool连接池的版本。Hibernate是Java开发中的一个流行对象关系映射(ORM)工具,它允许开发者用面向对象的方式来处理数据库操作...

    hibernate 连接池配置详解

    在Hibernate 2.x版本中,默认使用的是一个简单的内部实现,而在Hibernate 3.x版本中则不再推荐使用默认连接池,因为其功能相比其他成熟的第三方连接池如C3P0、DBCP等较为薄弱。 #### 三、C3P0 连接池配置 C3P0是一...

    基于ssh的proxool连接池配置

    总之,基于SSH的Proxool连接池配置涉及到Spring、Hibernate和Proxool之间的协作,通过这种方式,我们可以有效地管理和优化数据库连接,提高应用程序的性能和稳定性。在实际开发中,需要根据项目需求调整配置参数,以...

    c3p0、proxool、dbcp数据库连接池

    本文将深入探讨三个常用的数据库连接池:C3P0、DBCP和Proxool,以及如何结合Log4j2进行日志记录。 ### C3P0 C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。C3P0的核心...

    配置Hibernate使用Proxool连接池

    2. 配置Hibernate:在Hibernate的主配置文件(通常是hibernate.cfg.xml)中,需要定义数据源,指定使用Proxool连接池。例如: ```xml &lt;hibernate-configuration&gt; &lt;session-factory&gt; ... &lt;property name="...

    Hibernate里配置第三方数据库连接池

    总结,配置Hibernate中的第三方数据库连接池Proxool,可以提升系统的性能和资源利用率。正确配置和使用Proxool,对于Java Web开发者来说,是优化数据库访问策略、提升系统稳定性和响应速度的重要手段。

    Spring+Hibernate+Proxool连接池

    通过这样的配置,Spring和Hibernate可以利用Proxool的连接池服务,实现对数据库连接的有效管理,提升系统的并发处理能力和资源利用率。同时,Proxool的监控功能也能帮助开发者监控数据库连接的状态,以便优化系统...

    proxool-0.9连接池+hibernate

    在本资料中,我们将深入探讨`Proxool-0.9`版本与`Hibernate`框架的整合,以及它们在实际应用中的作用和配置方法。 `Proxool`连接池的主要功能包括: 1. **连接管理**:`Proxool`能够管理数据库连接,避免了频繁...

    hibernate-proxool-4.3.0.Final.jar

    解决找不到org.hibernate.proxool.internal.ProxoolConnectionProvider的问题

    三大连接池参数说明(DBCP\C3P0\Proxool)

    【三大连接池参数详解】 ...总结来说,三大连接池——DBCP、C3P0 和 Proxool,各有其特点和配置选项。选择合适的连接池并正确配置这些参数,能够提高数据库操作的效率,减少资源消耗,并确保系统的稳定运行。

    hibernate连接池配置

    在Hibernate中,官方推荐的连接池有C3P0、Proxool和DBCP。 1. **Apache DBCP连接池**: - 在Hibernate 2中,DBCP是官方推荐的连接池之一,但在Hibernate 3及更高版本中,由于存在缺陷,不再推荐使用。如果在...

    Hibernate几种连接池的比较

    - 性能:C3P0和Proxool都比Hibernate内置的连接池表现更好。 - 稳定性:C3P0和DBCP经过了广泛测试,通常被认为是稳定的。 - 功能和灵活性:C3P0和Proxool提供了丰富的配置选项,允许对连接池进行更精细的控制。 - ...

Global site tag (gtag.js) - Google Analytics