文档章节

关于数据库连接池的配置问题

 黄成老湿
发布于 2015/06/01 15:35
字数 1120
阅读 5
收藏 0
点赞 0
评论 0

Hibernate开发组推荐使用c3p0,spring开发组推荐使用dbcp

DBCP:需要commons-dbcp-1.2.1.jar      commons-pool-1.3.jar

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">  
<property name="driverClassName" value="${db.driverClassName}"/>  
<property name="url" value="${db.url}"/>  
<property name="username" value="${db.username}"/>  
<property name="password" value="${db.password}"/>  
<!--initialSize: 初始化连接-->  
<property name="initialSize" value="5"/>  
<!--maxIdle: 最大空闲连接-->  
<property name="maxIdle" value="10"/>  
<!--minIdle: 最小空闲连接-->  
<property name="minIdle" value="5"/>  
<!--maxActive: 最大连接数量-->  
<property name="maxActive" value="15"/>  
<!--removeAbandoned: 是否自动回收超时连接-->  
<property name="removeAbandoned" value="true"/>  
<!--removeAbandonedTimeout: 超时时间(以秒数为单位)-->  
<property name="removeAbandonedTimeout" value="180"/>  
<!--maxWait: 超时等待时间以毫秒为单位 6000毫秒/1000等于60秒-->  
<property name="maxWait" value="3000"/>  
<property name="validationQuery">  
<value>SELECT 1</value>  
</property>  
<property name="testOnBorrow">  
<value>true</value>  
</property>  
</bean>


C3P0:需要c3p0-0.9.0.4.jar

<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close" 
  <property name="driverClass" value="${db.driverClassName}"/>  
  <property name="jdbcUrl" value="${db.url}"/>  
  <property name="properties">  
    <props>  
      <!--当连接池中的连接耗尽的时候c3p0一次同时获取的连接数。Default: 3-->  
      <prop key="c3p0.acquire_increment">5</prop>  
      <!--每60秒检查所有连接池中的空闲连接。Default: 0 -->   
      <prop key="c3p0.idle_test_period">60</prop>  
      <prop key="c3p0.max_size">15</prop>  
      <prop key="c3p0.max_statements">0</prop>  
      <prop key="c3p0.min_size">10</prop>  
      <prop key="user">${db.user}</prop>  
      <prop key="password">${db.pass}</prop>  
    </props>  
  </property>  
</bean>

C3P0拥有比DBCP更丰富的配置属性,通过这些属性,可以对数据源进行各种有效的控制: 
     acquireIncrement:当连接池中的连接用完时,C3P0一次性创建新连接的数目; 
     acquireRetryAttempts:定义在从数据库获取新连接失败后重复尝试获取的次数,默认为30; 
     acquireRetryDelay:两次连接中间隔时间,单位毫秒,默认为1000; 
     autoCommitOnClose:连接关闭时默认将所有未提交的操作回滚。默认为false; 
     automaticTestTable: C3P0将建一张名为Test的空表,并使用其自带的查询语句进行测试。如果定义了这个参数,那么属性preferredTestQuery将被忽略。 你 不能在这张Test表上进行任何操作,它将中为C3P0测试所用,默认为null; 
     breakAfterAcquireFailure: 获取连接失败将会引起所有等待获取连接的线程抛出异常。但是数据源仍有效保留,并在下次调    用getConnection()的时候继续尝试获取连 接。如果设为true,那么在尝试获取连接失败后该数据源将申明已断开并永久关闭。默认为 false; 
     checkoutTimeout:当连接池用完时客户端调用getConnection()后等待获取新连接的时间,超时后将抛出SQLException,如设为0则无限期等待。单位毫秒,默认为0; 
     connectionTesterClassName: 通过实现ConnectionTester或QueryConnectionTester的类来测试连接,类名需设置为全限定名。默认为 com.mchange.v2.C3P0.impl.DefaultConnectionTester; 
     idleConnectionTestPeriod:隔多少秒检查所有连接池中的空闲连接,默认为0表示不检查; 
     initialPoolSize:初始化时创建的连接数,应在minPoolSize与maxPoolSize之间取值。默认为3; 
     maxIdleTime:最大空闲时间,超过空闲时间的连接将被丢弃。为0或负数则永不丢弃。默认为0; 
     maxPoolSize:连接池中保留的最大连接数。默认为15; 
     maxStatements: JDBC的标准参数,用以控制数据源内加载的PreparedStatement数量。但由于预缓存的Statement属 于单个Connection 而不是整个连接池。所以设置这个参数需要考虑到多方面的因素,如果maxStatements与 maxStatementsPerConnection 均为0,则缓存被关闭。默认为0; 
     maxStatementsPerConnection:连接池内单个连接所拥有的最大缓存Statement数。默认为0; 
     numHelperThreads:C3P0是异步操作的,缓慢的JDBC操作通过帮助进程完成。扩展这些操作可以有效的提升性能,通过多线程实现多个操作同时被执行。默认为3; 
     preferredTestQuery:定义所有连接测试都执行的测试语句。在使用连接测试的情况下这个参数能显著提高测试速度。测试的表必须在初始数据源的时候就存在。默认为null; 
     propertyCycle: 用户修改系统配置参数执行前最多等待的秒数。默认为300; 
     testConnectionOnCheckout: 因性能消耗大请只在需要的时候使用它。如果设为true那么在每个connection提交的时候都 将校验其有效性。建议使用 idleConnectionTestPeriod或automaticTestTable 
等方法来提升连接测试的性能。默认为false; 
     testConnectionOnCheckin:如果设为true那么在取得连接的同时将校验连接的有效性。默认为false。

© 著作权归作者所有

共有 人打赏支持
粉丝 1
博文 4
码字总数 1837
作品 0
南京
Java 数据库连接池的技术选型都应考虑哪些要素

数据库连接池是一个牵涉面很广的话题,对于大型系统,数据库连接池的好坏,关系到系统的性能和稳定性,因此,选好数据库连接池,是系统在架构时期的一个重要任务。 一般来讲,Java数据库连接...

webas ⋅ 2013/04/26 ⋅ 0

关于MySQL数据库连接超时问题的分析与解决

操作系统 Windows 10 Enterprise,数据库 MySQL-5.5.16,c3p0-0.9.5.2 关于针对数据库的连接,之前没有特别注意过,直到遇到如下问题: Could not open JDBC Connection for transaction; ne...

lmy86263 ⋅ 2017/07/09 ⋅ 0

java连接池的maxIdle该如何配置

问题现象 用60个线程并发访问某个读和写均有的业务接口,性能测试人员查看Oracle数据库负载CPU非常高,而且oracle的Logons指标达到148.1次/秒(这个值的含义是数据库客户端登录认证的每秒的次...

杨武兵 ⋅ 2016/03/17 ⋅ 0

Go commons pool 1.0 发布,通用 Go 语言对象池

Go commons pool是一个通用的go语言对象池,基于Java版本的Apache Commons Pool改写。Go commons pool实现了Java版本的主要功能,改写了大多数Java版本的测试用例,测试覆盖率达到90%,性能测...

jolestar ⋅ 2016/01/18 ⋅ 11

不断优化配置,逐步提高性能——我的一次性能测试经历

近日,合作伙伴想要针对我们的应用服务器做一个性能测试,测试的基础是伙伴原有的一个功能庞大而结构复杂的业务系统,目的是看应用服务器是否能够满足业务系统的需要,并对应用服务器做一个总...

晨曦之光 ⋅ 2012/03/09 ⋅ 0

缓存与连接池

一.初识高速缓存和连接池 设想这样一种情形:你突然口渴,需要一杯水来缓解,从心情上来讲,当然是越快越好 了。通常,一杯水的产生包括从水源(井水、河水或江水、甚至海水等)抽取,通过管...

储明城 ⋅ 2016/03/08 ⋅ 0

基于JDBC的数据库连接池高效管理策略

介绍 在使用Java语言进行和数据库有关的的应用开发中,一般都使用JDBC来进行和数据库的交互,其中有一个关键的概念就是Connection(连接),它在Java中是一个类,代表了一个通道。通过它,使...

旋转木马-千里马 ⋅ 2016/03/18 ⋅ 0

Spring(五):配置dataSource连接池

一般情况下都会在spring的配置文件中进行数据源的配置,为了提高数据源的内存利用效率基本上都是会配置数据源连接池的。 在讲到连接池之前我们先看一下数据源直接连接数据库的配置,以下就是...

_Roger_ ⋅ 2015/09/21 ⋅ 0

Java数据库连接池(二)

Java数据库连接池(二) 连接池需要解决的问题 连接池在Java应用中扮演着重要的角色,J2EE已经将连接池作为Java的一项基本规范纳入到JDBC4.0中,可见连接池的重要性。作为所有的连接池都需要...

齐鹏飞 ⋅ 2012/03/20 ⋅ 1

数据库连接池应用中数据库服务器断开超时连接的问题

数据库应用开发过程中,我们可能会遇到一个问题:应用使用了数据库连接池,每经过指定时间后,发出到数据库服务器的任何请求都会失败,而且有且仅有一次失败,之后的正常访问都没有问题。尤其...

如风达 ⋅ 2015/09/18 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

JDK1.6和JDK1.7中,Collections.sort的区别,

背景 最近,项目正在集成测试阶段,项目在服务器上运行了一段时间,点击表格的列进行排序的时候,有的列排序正常,有的列在排序的时候,在后台会抛出如下异常,查询到不到数据,而且在另外一...

tsmyk0715 ⋅ 27分钟前 ⋅ 0

spring RESTful

spring RESTful官方文档:http://spring.io/guides/gs/rest-service/ 1. 可以这么去理解RESTful:其实就是web对外提供的一种基于URL、URI的资源供给服务。不是一个原理性知识点。是一个方法论...

BobwithB ⋅ 29分钟前 ⋅ 0

C++ 中命名空间的 5 个常见用法

相信小伙伴们对C++已经非常熟悉,但是对命名空间经常使用到的地方还不是很明白,这篇文章就针对命名空间这一块做了一个叙述。 命名空间在1995年被引入到 c++ 标准中,通常是这样定义的: 命名...

柳猫 ⋅ 31分钟前 ⋅ 0

@Conditional派生注解

@Conditional派生注解(Spring注解版原生的@Conditional作用) 作用:必须是@Conditional指定的条件成立,才给容器中添加组件,配置配里面的所有内容才生效; @Conditional扩展注解 作用(判...

小致dad ⋅ 32分钟前 ⋅ 0

适配器模式

适配器模式 对象适配器 通过私有属性来实现的类适配器 通过继承来实现的接口适配器 通过继承一个默认实现的类实现的

Cobbage ⋅ 36分钟前 ⋅ 0

Java 限流策略

概要 在大数据量高并发访问时,经常会出现服务或接口面对暴涨的请求而不可用的情况,甚至引发连锁反映导致整个系统崩溃。此时你需要使用的技术手段之一就是限流,当请求达到一定的并发数或速...

轨迹_ ⋅ 40分钟前 ⋅ 0

GridView和子View之间的间隙

默认的情况下GridView和子View之间会有一个间隙,原因是GridView为了在子View被选中时在子View周围显示一个框。去掉的办法如下: android:listSelector="#0000" 或 setSelector(new ColorDra...

国仔饼 ⋅ 43分钟前 ⋅ 0

idea插件开发

1 刷新页面要使用多线程 2 调试要使用restart bug 不要去关闭调试的idea 否则再次启动会卡住

林伟琨 ⋅ 43分钟前 ⋅ 0

Java 内存模型

物理机并发处理方案 绝大多数计算任务,并不是单纯依赖 cpu 的计算完成,不可避免需要与内存交互,获取数据。内存要拿到数据,需要和硬盘发生 I/O 操作。计算机存储设备与 cpu 之间的处理速度...

长安一梦 ⋅ 50分钟前 ⋅ 0

思路分析 如何通过反射 给 bean entity 对象 的List 集合属性赋值?

其实 这块 大家 去 看 springmvc 源码 肯定可以找到实现办法。 因为 spirngmvc 的方法 是可以 为 对象 参数里面的 list 属性赋值的。 我也没有看 具体的 mvc 源码实现,我这里只是 写一个 简...

之渊 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部