文档章节

Proxool连接池 使用

之渊
 之渊
发布于 2017/02/23 10:17
字数 1865
阅读 25
收藏 1

simultaneous-build-throttle: 是指在任一时刻,可以(同时)建立的最大连接数,也就是说,就是已经请求的、但还没可用的新连接数量。因为连接可以用多线程建立,从决定要建立连接到连接可用是需要一定时间的,所以我们需要一些方式来避免大量的线程想同时建立连接。(我们本应该找一个更聪明的方式来解决这个问题,总有一天我们会找到的)默认值是 10 当我使用140个用户,进行压力测试时,发现偶尔,会有多于10个要求同时建立连接的请求,当请求数量超过限定的数值时,会出现连接失败的情况。 因此结论就是,当数据库并发连接可能会比较高的应用,这个值应该适当的设大一点。 如果并发请求很高,可能出现的bug为

Caused by: java.sql.SQLException: We are already in the process of making 11 connections and the number of simultaneous builds has been throttled to 10

maximum-active-time: 如果一个线程活动时间超过这个数值,线程会被杀死。所以要确保这个数值设置得比最慢的响应时间长。默认是5分钟。守护进程会把连接池中多余的可用线程(未用的、超过这个时间的)杀死,最终保留的连接数量就是minimum-connection-count规定的数量。守护进程会根据house- keeping-sleep-time参数设置的时间隔定时检查。

maximum-connection-lifetime: 指一个连接最大的存活时间(毫秒为单位),超过这个时间,连接会被杀死。默认值是4小时。

overload-without-refusal-lifetime: 这个参数帮助我们确定连接池的状态,如果在这个时间阀值内(单位为毫秒)拒绝了一个连接,就认为是过载了。默认值是60。

alias:数据源的别名

driver-url:url连接串,须确定用户名和密码

driver-class:驱动名

username:用户名(proxool没有使用,但是不能没有)

password:密码(proxool没有使用,但是不能没有)

maximum-new-connections:没有空闲连接可以分配而在队列中等候的最大请求数,超过这个请求数的用户连接就不会被接受 ,已经过时了, simultaneous-build-throttle 这个来代替。

test-before-use: 如果连接池在运行当中,出现网络或者数据库故障而无法连接到数据库,在恢复正常以后,由于连接是在连接池中持久保存的,会出现连接仍然不可用的情况,这时连接池里的连接实际上都是坏连接,怎么让连接池可以自动重连清除这些坏连接呢? 只要配置了test-before-use 参数,即每次取出连接都检查连接是否可用,就可以做到让连接池实现在故障恢复后自动重连接

需要注意一点,对于Mysql数据库还必须在连接参数里加上autoReconnect=true 参数,否则即使打开了test-before-use 参数,仍然不能重连接!

fatal-sql-exception: 它是一个逗号分割的信息片段.当一个SQL异常发生时,他的异常信息将与这个信息片段进行比较.如果在片段中存在,那么这个异常将被认为是个致命错误(Fatal SQL Exception ).这种情况下,数据库连接将要被放弃.无论发生什么,这个异常将会被重掷以提供给消费者.用户最好自己配置一个不同的异常来抛出.

fatal-sql-exception-wrapper-class: 正如上面所说,你最好配置一个不同的异常来重掷.利用这个属性,用户可以包装SQLException,使他变成另外一个异常.这个异常或者继承 SQLException或者继承字RuntimeException.proxool自带了2个实现:’org.logicalcobwebs.proxool.FatalSQLException’ 和’org.logicalcobwebs.proxool.FatalRuntimeException’ .后者更合适.

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

house keeper 保留线程处于睡眠状态的最长时间,house keeper 的职责就是检查各个连接的状态,并判断是否需要销毁或者创建.

house-keeping-test-sql: 如果发现了空闲的数据库连接.house keeper 将会用这个语句来测试.这个语句最好非常快的被执行.如果没有定义,测试过程将会被忽略。

一般mysql可用select SYSDATE ,Oracle可用 select sysdate from dual 或者 select 1 from dual

injectable-connection-interface: 允许proxool实现被代理的connection对象的方法.

injectable-statement-interface: 允许proxool实现被代理的Statement 对象方法. injectable-prepared-statement-interface: 允许proxool实现被代理的PreparedStatement 对象方法. injectable-callable-statement-interface: 允许proxool实现被代理的CallableStatement 对象方法. jndi-name: 数据源的名称

maximum-active-time: 如果housekeeper 检测到某个线程的活动时间大于这个数值.它将会杀掉这个线程.所以确认一下你的服务器的带宽.然后定一个合适的值.默认是5分钟. maximum-connection-count: The maximum number of connections to the database. Default is 15. 最大的数据库连接数.默认是15 minimum-connection-count: 最小的数据库连接数,默认是5

prototype-count: 连接池中可用的连接数量.如果当前的连接池中的连接少于这个数值.新的连接将被建立(假设没有超过最大可用数).例如.我们有3个活动连接2个可用连接,而我们的prototype-count是4,那么数据库连接池将试图建立另外2个连接.这和 minimum-connection-count不同. minimum-connection-count把活动的连接也计算在内.prototype-count 是spare connections 的数量.

statistics: 连接池使用状况统计。 参数“10s,1m,1d” statistics-log-level: 日志统计跟踪类型。 参数“ERROR”或 “INFO”

trace: 如果为true,那么每个被执行的SQL语句将会在执行期被log记录(DEBUG LEVEL).你也可以注册一个ConnectionListener (参看ProxoolFacade)得到这些信息. verbose: 详细信息设置。 参数 bool 值

下面是我的配置


<bean id="dataSource" class="org.logicalcobwebs.proxool.ProxoolDataSource">
		<property name="driver" value="${db.driver}" />
		<property name="driverUrl" value="${db.url}" />
		<property name="user" value="${db.username}" />
		<property name="password" value="${db.password}" />
		<property name="alias" value="${db.alias}" />
		<!--这是我们可一次建立的最大连接数。那就是新增的连接请求,但还没有可供使用的连接。由于
		连接可以使用多线程,在有限的时间之间建立联系从而带来可用连接,
		但是我们需要通过一些方式确认一些线程并不是立即响应
		连接请求的,默认是10。  -->
		<property name="simultaneousBuildThrottle" value="${db.simultaneousBuildThrottle}" />
		<!--  如果housekeeper 检测到某个线程的活动时间大于这个数值.它将会杀掉这个线程.
		 所以确认一下你的服务器的带宽.然后定一个合适的值.默认是5分钟  -->
		<property name="maximumActiveTime" value="${db.maximumActiveTime}" />
		<!-- 自动侦察各个连接状态的时间间隔(毫秒),侦察到空闲的连接就马上回收,超时的销毁 默认30秒)  -->
		<property name="houseKeepingSleepTime" value="${db.houseKeepingSleepTime}" />
		<property name="houseKeepingTestSql" value="${db.houseKeepingTestSql}" />
		<property name="maximumConnectionCount" value="${db.maximumConnectionCount}" />
		<property name="minimumConnectionCount" value="${db.minimumConnectionCount}" />
		<!--在使用之前测试,是否可用连接  --> 
		<property name="testBeforeUse"  value="true" />
		<!-- 最少保持的空闲连接数(默认2个)  -->
		<property name="prototypeCount" value="${db.prototypeCount}" />
		<property name="delegateProperties" value="characterEncoding=${db.characterEncoding}" />
	</bean>

对应配置文件

db.alias=dbpool
db.simultaneousBuildThrottle=60
db.maximumActiveTime = 600000
db.houseKeepingSleepTime = 120000
# mysql 测试语句
#db.houseKeepingTestSql=select 1
#oracle 测试语句
db.houseKeepingTestSql=select sysdate from dual 
db.characterEncoding=UTF-8
#db.maximumConnectionCount=100
#db.minimumConnectionCount=30
db.maximumConnectionCount=100
db.minimumConnectionCount=30
db.prototypeCount = 5
jdbc.dbType=mysql

本文转载自:http://blog.csdn.net/u010486495/article/details/51749642

共有 人打赏支持
之渊
粉丝 11
博文 508
码字总数 150392
作品 0
佛山
程序员
proxool配置文件中用户和密码加密

Proxool是一种Java数据库连接池技术。sourceforge下的一个开源项目,这个项目提供一个健壮、易用的连接池,最为关键的是这个连接池提供监控的功能,方便易用,便于发现连接泄漏的情况。 Prox...

yunlielai
2017/06/23
0
0
Proxool在web项目中的配置,以及与spring3、hibernate4的集成

一、 Proxool 简介 一种java数据库连接池技术。是sourceforge下的一个开源项目,这个项目提供了一个健壮已用的连接池,同时提供了这个连接池的监控功能。 目前最为常见的三种JDBC连接池技术:...

heroShane
2014/02/09
0
0
MySQL+Hibernate下连接空闲8小时自动断开问题解决

本文为转载学习 转载文章1:http://hi.baidu.com/boyyf/item/fe4dcc1329297349e75e06ce 前段时间刚完成一个家教网项目,数据库为MySQL5.0,持久层使用Hibernate 3.1,没有使用额外的连接池,...

heroShane
2014/01/27
0
0
proxool详细配置

proxool一个数据库连接池框架,提供了对你选择的其它类型的驱动程序的连接池封装。可以非常简单的移植到现存的代码中。完全可配置。快速,成熟,健壮。可以透明地为你现存的JDBC驱动程序增加...

如风达
2016/08/17
9
0
hibernate 连接池 转

Hibernate支持DBCP包进行数据库连接池的配置。简要说明配置过程: (仅仅是个人摸索,如有问题,欢迎指点) 需要的包: Commons-Pool (下载地址:http://jakarta.apache.org/commons/pool/):...

asdtiang
2010/02/22
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

OSChina 周日乱弹 —— 种族不同,禁止交往

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @小小编辑:推荐歌曲《苏菲小姐》- 鱼果 《苏菲小姐》- 鱼果 手机党少年们想听歌,请使劲儿戳(这里) @貓夏:下大雨 正是睡觉的好时候 临睡前...

小小编辑
今天
226
6
Python 搭建简单服务器

Python动态服务器网页(需要使用WSGI接口),基本实现步骤如下: 1.等待客户端的链接,服务器会收到一个http协议的请求数据报 2.利用正则表达式对这个请求数据报进行解析(请求方式、提取出文...

代码打碟手
今天
1
0
Confluence 6 删除垃圾内容

属性(profile)垃圾 属性垃圾的定义为,一个垃圾用户在 Confluence 创建了用户,但是这个用户在自己的属性页面中添加了垃圾 URL。 如果你有很多垃圾用户在你的系统中创建了属性,你可以使用...

honeymose
今天
1
0
qduoj~前端~二次开发~打包docker镜像并上传到阿里云容器镜像仓库

上一篇文章https://my.oschina.net/finchxu/blog/1930017记录了怎么在本地修改前端,现在我要把我的修改添加到部署到本地的前端的docker容器中,然后打包这个容器成为一个本地镜像,然后把这...

虚拟世界的懒猫
今天
1
0
UML中 的各种符号含义

Class Notation A class notation consists of three parts: Class Name The name of the class appears in the first partition. Class Attributes Attributes are shown in the second par......

hutaishi
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部