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

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

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

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

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

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

目前常用的连接池有:C3P0、DBCP、Proxool

网上的评价是:

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

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

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

配置如下:

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

<bean id="proxoolDataSource" 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 id="sessionFactory" 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[转]的更多相关文章

  1. Druid + spring 配置数据库连接池

    1. Druid的简介 Druid是一个数据库连接池.Druid是目前最好的数据库连接池,在功能.性能.扩展性方面,都超过其他数据库连接池,包括DBCP.C3P0.BoneCP.Proxool.JBo ...

  2. spring配置数据库连接池druid

    连接池原理 连接池基本的思想是在系统初始化的时候,将数据库连接作为对象存储在内存中,当用户需要访问数据库时,并非建立一个新的连接,而是从连接池中取出一个已建立的空闲连接对象.使用完毕后,用户也并非将连 ...

  3. spring配置数据库连接池

    1. jdbcConfig.properties文件中 jdbc.jdbcUrl=jdbc:mysql:///ssm-crudjdbc.driverClass=com.mysql.jdbc.Drive ...

  4. SpringBoot学习(三)-->Spring的Java配置方式之读取外部的资源配置文件并配置数据库连接池

    三.读取外部的资源配置文件并配置数据库连接池 1.读取外部的资源配置文件 通过@PropertySource可以指定读取的配置文件,通过@Value注解获取值,具体用法: @Configuration ...

  5. java配置数据库连接池的方法步骤

    java配置数据库连接池的方法步骤 java配置数据库连接池的方法步骤,需要的朋友可以参考一下   先来了解下什么是数据库连接池数据库连接池技术的思想非常简单,将数据库连接作为对象存储在一个Vecto ...

  6. Spring Boot 数据库连接池 Druid

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

  7. Spring配置连接池

    ---------------------siwuxie095                                 Spring 配置连接池         1.Spring 配置内置连接 ...

  8. 数据库连接池proxool的两种使用方式

    数据库连接池可以通过两种方式来应用,针对web应用和非web应用而来. 非web应用的数据库连接池配置 第一种方式:工厂类 非web应用可以使用工厂模式将数据库连接创建封装在一个工具类中,工具类中又使 ...

  9. WebSphere配置数据库连接池

    通过WebSphere配置数据库连接池一共需要三项:     1.配置连接驱动,在这里叫:JDBC提供程序;    2.配置数据库连接池,在这里叫:配置数据源;  3.配置数据库登录帐号,密码,在这里 ...

随机推荐

  1. Python3练习题系列(02)

    题目: 思考循环结构,看看它是怎样运行的,对我们认识程序有何益处. 知识点: list, for-loop, range 练习代码: 练习1 the_count = [1, 2, 3, 4, 5] # ...

  2. php urlencode函数 (中文字符转换为十六进制)

    urlencode()函数原理就是首先把中文字符转换为十六进制,然后在每个字符前面加一个标识符%. urldecode()函数与urlencode()函数原理相反,用于解码已编码的 URL 字符串,其 ...

  3. [POI2011]Rotacje na drzewie (2)/[BZOJ3702]二叉树

    [POI2011]Rotacje na drzewie (2) 题目大意: 一棵有\(n\)个叶子结点的二叉树,每个叶子结点有一个权值,恰好是\(1\sim n\)的一个排列,你可以任意交换每一对子结 ...

  4. Docker 容器生命周期管理命令

    docker run 命令 -d: 后台运行容器,并返回容器ID: -i: 以交互模式运行容器,通常与 -t 同时使用: -t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用: --name= ...

  5. B - 可能的路径(gcd变形)

    https://vjudge.net/contest/218366#problem/B 要不是在数学题专题里,我估计就盲目搜索了.10^18范围1s应该过不去. 再细看能感觉到是gcd的变形,但是具体 ...

  6. 微软官方的.net命令行参数库

    虽然现在是图形化大行其道的时代,但让程序支持命令行启动对于专业的领域还是有不少需求的..net本身并没有内置对命令行解析的支持,我之前就写过一篇文章让.Net程序支持命令行启动介绍了几个第三方的命令行 ...

  7. 手机号是SIM卡的号呢,还是买手机时就带的

    可以用原来的号码!把原来的卡装在新手机里就可以了,你的号码没有改变! 手机的号是由sim卡来决定的! 但是卡上的号码显示的是卡的一些信息! 你不用去理会它! 全文:http://iask.sina.c ...

  8. 【linux】linux下对java程序生成dump文件,并使用IBM Heap Analyzer进行分析,查找定位内存泄漏的问题代码

    1.首先,java程序启动在linux,怎么生成dump文件? 1>第一步,首先你需要得到java程序的PID,最简单的方法使用如下命令 ps -ef|grep java 或者如果是docker ...

  9. Android防止进程被第三方软件杀死

    http://blog.csdn.net/wangliang198901/article/details/12342845 http://stackoverflow.com/questions/385 ...

  10. iOS开发-消息转发

    消息转发是OC运行时比较重要的特性,Objective-C运行时的主要的任务是负责消息分发,我们在开发中"unrecognized selector sent to instance xx& ...