Spring配置-数据库连接池proxool[转]

摘要:
释放空闲时间超过最大空闲时间的数据库连接,以避免由于未释放数据库连接而导致的数据库连接遗漏。当应用程序从连接池请求的连接数超过最大连接数时,超过最小连接数的后续连接请求等同于建立新的数据库连接。这些大于最小连接数的数据库连接在使用后不会立即释放,propertyname=“user”value=“${jdbc.connection.username}”/>

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

  数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而再不是重新建立一个;释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏。这项技术能明显提高对数据库操作的性能。

  数据库连接池在初始化时将创建一定数量的数据库连接放到连接池中,这些数据库连接的数量是由最小数据库连接数来设定的。无论这些数据库连接是否被使用,连接池都将一直保证至少拥有这么多的连接数量。连接池的最大数据库连接数量限定了这个连接池能占有的最大连接数,当应用程序向连接池请求的连接数超过最大连接数量时,这些请求将被加入到等待队列中。数据库连接池的最小连接数和最大连接数的设置要考虑到下列几个因素:

1) 最小连接数是连接池一直保持的数据库连接,所以如果应用程序对数据库连接的使用量不大,将会有大量的数据库连接资源被浪费;

2) 最大连接数是连接池能申请的最大连接数,如果数据库连接请求超过此数,后面的数据库连接请求将被加入到等待队列中,这会影响之后的数据库操作。

3) 如果最小连接数与最大连接数相差太大,那么最先的连接请求将会获利,之后超过最小连接数量的连接请求等价于建立一个新的数据库连接。不过,这些大于最小连接数的数据库连接在使用完不会马上被释放,它将被放到连接池中等待重复使用或是空闲超时后被释放。

目前常用的连接池有:C3P0DBCPProxool

网上的评价是:

C3P0比较耗费资源,效率方面可能要低一点。

DBCP在实践中存在BUG,在某些种情会产生很多空连接不能释放,Hibernate3.0已经放弃了对其的支持。

Proxool的负面评价较少,现在比较推荐它,而且它还提供即时监控连接池状态的功能,便于发现连接泄漏的情况。

配置如下:

1、在spring配置文件中,一般在applicationContext.xml

     <bean class="org.logicalcobwebs.proxool.ProxoolDataSource">

            <property name="driver" value="${jdbc.connection.driverClassName}"/>

            <property name="driverUrl" value="${jdbc.connection.url}"/>

            <property name="user" value="${jdbc.connection.username}"/>

            <property name="password" value="${jdbc.connection.password}"/>

            <!-- 测试的SQL执行语句 -->

           <property name="houseKeepingTestSql" value="${proxool.houseKeepingTestSql}"/>

            <!-- 最少保持的空闲连接数 (默认2个) -->

             <property name="prototypeCount" value="${proxool.prototypeCount}"/>

            <!-- proxool自动侦察各个连接状态的时间间隔(毫秒),侦察到空闲的连接就马上回收,超时的销毁 默认30秒) -->

            <property name="houseKeepingSleepTime" value="${proxool.hourseKeepingSleepTime}"/>

            <!-- 最大活动时间(超过此时间线程将被kill,默认为5分钟) -->

             <property name="maximumActiveTime" value="${proxool.maximumActiveTime}"/>

            <!-- 连接最长时间(默认为4个小时) -->

            <property name="maximumConnectionLifetime" value="${proxool.maximumConnectionLifetime}"/>

            <!-- 最小连接数 (默认2个) -->

            <property name="minimumConnectionCount" value="${proxool.minimumConnectionCount}"/>

            <!-- 最大连接数 (默认5个) -->

            <property name="maximumConnectionCount" value="${proxool.maximumConnectionCount}"/>

            <!-- -->

            <property name="statistics" value="${proxool.statistics}"/>

            <!-- 别名 -->

             <property name="alias" value="${proxool.alias}"/>

            <!-- -->

            <property name="simultaneousBuildThrottle" value="${proxool.simultaneous-build-throttle}"/>

     </bean>

     然后注入到sessionFactory

     <bean class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">

           <property name="dataSource" ref="proxoolDataSource"/>

     </bean>

 Porxool 配置文件 

--==--==--==--==--==<proxool.xml>==--==--==--==--==--==--== 

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

<proxool> 

      <alias>WMS</alias> 

      <driver-url>jdbc:postgresql://192.168.210.184:5432/wms</driver-url> 

      <driver-class>org.postgresql.Driver</driver-class> 

      <driver-properties> 

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

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

      </driver-properties> 

      <minimum-connection-count>2</minimum-connection-count> 

      <maximum-connection-count>40</maximum-connection-count> 

      <simultaneous-build-throttle>20</simultaneous-build-throttle> 

      <prototype-count>2</prototype-count> 

      <house-keeping-test-sql>select CURRENT_DATE</house-keeping-test-sql> 

</proxool> 

--==--==--==--==--==<proxool.xml>==--==--==--==--==--==--== 

  

配置说明: 

alias                                          -〉数据库连接别名(程序中需要使用的名称) 

driver-url                                   -〉数据库驱动 

driver-class                                -〉驱动程序类 

driver-properties                        -〉联机数据库的用户和密码 

minimum-connection-count          -〉最小连接数量,建议设置0以上,保证第一次连接时间 

maximum-connection-count         -〉最大连接数量,如果超过最大连接数量则会抛出异常。连接数设置过多,服务器CPU和内存性能消耗很

大。 

simultaneous-build-throttle          -〉同时最大连接数 

prototype-count                          -〉一次产生连接的数量。 

                                                 例:如果现在prototype-count设置为4个,但是现在已经有2个可以获得的连接,那么

将会试图再创建2个连接。 

                                                  但不能超过最大连接数。 

maximum-active-time                 -〉连接最大时间活动 默认5分钟 

maximum-connection-lifetime      -〉连接最大生命时间 默认4小时

转自

免责声明:文章转载自《Spring配置-数据库连接池proxool[转]》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇远程连接电脑c#多线程lock无效下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Access数据库的常用数据类型和alter的用法

一、Access比较常用的数据类型:文本、备注、数字、日期/时间、货币   意思          Sql                    Access                 1)文本      nvarchar(30)        test 2)备注      ntext                     demo 3)数字   ...

Pycharm2018中DataBase的使用

1、点击右侧边栏的DataBase,在出现的Database窗口下点击绿色小加号,选择Data Source,选择需要的数据库类型,此处选择Sqlite 2、配置数据库连接信息 3、选择schema,可以看到数据表信息 4、打开sql面板,输入查询SQL执行...

Oracle数据库导入导出总结(dmp文件)

Oracle 10G 管理页面(Oracle Enterprise Manager 10g): http://localhost:1158/emhttp://localhost:1158/em/console/logon/logon Oracle数据库导出:   (1)整个用户下的所有数据(dmp文件):    《导出》          exp 用户...

crnn转换数据集

在做crnn实验的时候数据的格式是一张图片对应一个标签,比如说 图片名称 1.jpg 内容是 你好呀 那么你的标签就应该是 1.txt 在网上找了一个数据集 https://github.com/YCG09/chinese_ocr 数据集下载地址 数据集:https://pan.baidu.com/s/1QkI7kjah8SPHwOQ40rS1Pw (密码...

SqlServer 数据库/数据表 拆分(分布式)【转】

通过某种特定的条件,将存放在同一个数据库中的数据分散存放到多个数据库上,实现分布存储,通过路由规则路由访问特定的数据库,这样一来每次访问面对的就不是单台服务器了,而是N台服务器,这样就可以降低单台机器的负载压力。提示:sqlserver 2005版本之后,可以友好的支持“表分区”。 垂直(纵向)拆分:是指按功能模块拆分,比如分为订单库、商品库、用户库......

springmvc总结(配置传递参数去除前后空格、参数绑定时处理日期)

1.属性为Integer时,前台表单不填,默认为null;属性为String,前台表单不填,默认为"";2.属性为Integer时,前台表单填空格,model封装为null;属性为String,前台表单填空格,model封装为"  ";3.属性为Integer,后台model封装时【去除】前后空格;属性为String,后台model封装时【不去除】前后空格...