对数据库连接的一些理解,和hibernate3+proxool-0.9.1配置成功

    一,数据库连接

   对数据库连接的管理能显著影响到整个应用程序的伸缩性和健壮性,影响到程序的性能指标。数据库连接池正是针对这个问题提出来的。 
    数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,对数据的每一个操作(增删改)就会是一个数据库连接,所以一个用户可能有多个连接。

    数据库连接池在初始化时将创建一定数量的数据库连接放到连接池中,这些数据库连接的数量是由最小数据库连接数来设定的。无论这些数据库连接是否被使用,连接池都将一直保证至少拥有这么多的连接数量。连接池的最大数据库连接数量限定了这个连接池能占有的最大连接数,当应用程序向连接池请求的连接数超过最大连接数量时,这些请求将被加入到等待队列中。数据库连接池的最小连接数和最大连接数的设置要考虑到下列几个因素: 
1) 最小连接数是连接池一直保持的数据库连接,太大将会浪费内存; 
2) 最大连接数是连接池能申请的最大连接数,如果数据库连接请求超过此数,后面的数据库连接请求将被加入到等待队列中,这会影响之后的数据库操作。
3) 如果最小连接数与最大连接数相差太大,那么最先的连接请求将会获利,使用完后不释放,之后超过最小连接数量的连接请求等价于建立一个新的数据库连接。不过,这些大于最小连接数的数据库连接在使用完不会马上被释放,它将被放到连接池中等待重复使用或是空闲超时后被释放。

 

         连接池允许应用程序从连接池中获得一个连接并使用这个连接,而不需要为每一个连接请求重新建立一个连接。一旦一个新的连接被创建并且放置在连接池中,应用程序就可以重复使用这个连接而不必实施整个数据库连接创建过程。  
   
        当应用程序请求一个连接时,连接池为该应用程序分配一个连接而不是重新建立一个连接;当应用程序使用完连接后,该连接被归还给连接池而不是直接释放。   
    
          当然,实现连接池时要注意:确保你每一次的连接使用相同的连接字符串(和连接池相同);只有连接字符串相同时连接池才会工作。如果连接字符串不相同,应用程序就不会使用连接池而是创建一个新的连接。  
   
  何时创建连接池?  
   
  当第一个连接请求到来时创建连接池;连接池的建立由数据库连接的连接字符创来决定。每一个连接池都与一个不同的连接字符串相关。当一个新的连接请求到来时如果连接字符串和连接池使用的字符串相同,就从连接池取出一个连接;如果不相同,就新建一个连接池。  
   
  何时关闭连接池?  
   
  当连接池中的所有连接都已经关闭时关闭连接池。

 

1.Hibernate 中配置C3P0连接池

 

 <property name="hibernate.connection.provider_class" value="org.hibernate.connection.C3P0ConnectionProvider"/>
            <property name="hibernate.c3p0.maxIdleTime" value="25000"/>
            <property name="hibernate.c3p0.idleConnectionTestPeriod" value="1800"/>

 


2 hibernate3+ proxool-0.9.1配置

在persistence.xml中加入 
         <property name=" hibernate.connection.provider_class"                 value="org.hibernate.connection.ProxoolConnectionProvider" />
            <property name=" hibernate.proxool.pool_alias" value="mySqlPool"/>
            <property name=" hibernate.proxool.xml" value="Proxool.xml"/>
注意要加上红色的字体,要不然会报以下错误
org.hibernate.cfg.SettingsFactory - Could not obtain connection metadata
java.sql.SQLException: The url cannot be null

然后,在src目录下,加一个Proxool.xml文件,内容为

<?xml version="1.0" encoding="utf-8"?>
<something-else-entirely>
    <proxool>
        <alias>mySqlPool</alias>
        <driver-url>jdbc:mysql://localhost:3306/databasename</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>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>
        <house-keeping-test-sql>
            select CURRENT_DATE
        </house-keeping-test-sql>
    </proxool>
</something-else-entirely>
注意proxool.xml文件中不能有注释,否则会报错 Proxool Provider unable to load JAXP configurator file:proxool.xml,我就为这个折腾了半天。
再在web.xml中添加
   <servlet>
        <servlet-name>Admin</servlet-name>
        <servlet-class>
            org.logicalcobwebs.proxool.admin.servlet.AdminServlet
        </servlet-class>
    </servlet>
  <servlet-mapping>
        <servlet-name>Admin</servlet-name>
        <url-pattern>/Admin</url-pattern>
    </servlet-mapping>
就可以对连接池进行监听

在hibernate3.0中,已经不再支持dbcp了。proxool不少行家推荐使用.c3p0占用资源比较大,效率也不高.

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值