关闭

Apache-DBCP数据库连接池解读

标签: dbcpapache
1945人阅读 评论(0) 收藏 举报
分类:

概述

官网: https://commons.apache.org/proper/commons-dbcp/index.html

commons-dbcp2包依赖于commons-pool2包中的代码来提供底层对象池机制。


DBCP现在有三种不同的版本来支持不同版本的JDBC。如下所示

  • DBCP 2 compiles and runs under Java 7 only (JDBC 4.1)

  • DBCP 1.4 compiles and runs under Java 6 only (JDBC 4)

  • DBCP 1.3 compiles and runs under Java 1.4-5 only (JDBC 3)

由Java 7运行的应用程序应使用DBCP 2。

由Java 6运行的应用程序应使用DBCP 1.4。

在Java 1.4下运行时应使用DBCP 1.3。


DBCP 2基于Commons Pool 2,与DBCP 1.x相比,提供了更高的性能,JMX支持以及众多其他新功能。 由于DBCP 2.x与DBCP 1.x不是兼容的,所以升级到2.x的用户应该知道Java包名称已经改变,以及Maven坐标。 用户还应该注意,一些配置选项(例如maxActive to maxTotal)已被重命名.


配置项说明

基本配置项

username

连接的用户名,通过驱动创建我们需要的连接

password

连接的密码,通过驱动创建我们所需要的连接.

url

连接的路径,通过驱动创建我们所需要的连接.

driverClassname

要使用的JDBC驱动程序的完全限定的Java类名称

connectionProperties

JDBC驱动建立连接时附带的连接属性属性的格式必须为这样:[属性名=property;]
注意:”username” 与 “password” 两个属性会被明确地传递,因此这里不需要包含他们。

比如:

connectionProperties=useUnicode=true;characterEncoding=utf8

事务相关配置项

这里写图片描述


数据源链接数量配置项

这里写图片描述

注意: If maxIdle is set too low on heavily loaded systems it is possible you will see connections being closed and almost immediately new connections being opened. This is a result of the active threads momentarily closing connections faster than they are opening them, causing the number of idle connections to rise above maxIdle. The best value for maxIdle for heavily loaded system will vary but the default is a good starting point.


连接健康情况维护和检查

这里写图片描述
这里写图片描述


缓存语句配置项

这里写图片描述

This component has also the ability to pool PreparedStatements. When enabled a statement pool will be created for each Connection and PreparedStatements created by one of the following methods will be pooled:

public PreparedStatement prepareStatement(String sql)


public PreparedStatement prepareStatement(String sql, int resultSetType, int resultSetConcurrency)

NOTE - Make sure your connection has some resources left for the other statements. Pooling PreparedStatements may keep their cursors open in the database, causing a connection to run out of cursors, especially if maxOpenPreparedStatements is left at the default (unlimited) and an application opens a large number of different PreparedStatements per connection. To avoid this problem, maxOpenPreparedStatements should be set to a value less than the maximum number of cursors that can be open on a Connection.


连接泄露回收配置项

这里写图片描述

If you have enabled removeAbandonedOnMaintenance or removeAbandonedOnBorrow then it is possible that a connection is reclaimed by the pool because it is considered to be abandoned. This mechanism is triggered when (getNumIdle() < 2) and (getNumActive() > getMaxTotal() - 3) and removeAbandonedOnBorrow is true; or after eviction finishes and removeAbandonedOnMaintenance is true. For example, maxTotal=20 and 18 active connections and 1 idle connection would trigger removeAbandonedOnBorrow, but only the active connections that aren’t used for more then “removeAbandonedTimeout” seconds are removed (default 300 sec). Traversing a resultset doesn’t count as being used. Creating a Statement, PreparedStatement or CallableStatement or using one of these to execute a query (using one of the execute methods) resets the lastUsed property of the parent connection.

1
0
查看评论

【Mybatis源码分析】Mybatis源码分析-数据库连接池

Mybatis支持三种类型的数据源处理:JNDI、无连接池和有连接池功能数据源,有连接池功能是在无连接池功能的基础上增加了连接池的处理。 Mybatis的数据源管理是通过工厂模式实现,通过DataSourceFactory接口实现不同功能的数据源管理工厂。 一、 ...
  • lizhengjava
  • lizhengjava
  • 2017-08-10 17:52
  • 114

mybatis源码分析----数据库连接池----连接池概述

mybatis是使用数据库连接池的,如果不使用数据库连接池,那么耗费的时间太长了,比如:你链接一个mysql数据库建立连接需要的时间为:526毫秒,但是查询的时间只要3-4毫秒,如果Connection使用一次就丢掉,真的是浪费时间和性能,就像打电话一样子,说一句你好就挂断,真的是浪费时间,所以,m...
  • LX928525166
  • LX928525166
  • 2016-05-29 14:46
  • 757

C3P0-数据库连接池解读

概述 配置项说明 常用配置 管理连接池的大小和连接的生存时间 配置连接测试 配置PreparedStatement缓存 重连相关配置 定制管理Connection的生命周期 配置未提交的事务处理 配置debug和回收Connection概述官网: http://www.mchange.com/pro...
  • yangshangwei
  • yangshangwei
  • 2017-09-17 11:26
  • 1983

Apache-dbcp 属性

Apache-DBCP dataSource: 要连接的 datasource (通常我们不会定义在 server.xml) defaultAutoCommit: 对于事务是否 autoCommit, 默认值为 true defaultReadOnly: 对于数据库是否只能读取, 默认值为 f...
  • ask_rent
  • ask_rent
  • 2013-02-27 12:48
  • 1611

数据库连接池原理详解与自定义连接池实现

实现原理数据库连接池在初始化时将创建一定数量的数据库连接放到连接池中,这些数据库连接的数量是由最小数据库连接数制约。无论这些数据库连接是否被使用,连接池都将一直保证至少拥有这么多的连接数量。连接池的最大数据库连接数量限定了这个连接池能占有的最大连接数,当应用程序向连接池请求的连接数超过最大连接数量时...
  • fuyuwei2015
  • fuyuwei2015
  • 2017-05-17 18:18
  • 1389

Java数据库连接池 学习笔记

背景对于一个简单的数据库应用,由于对于数据库的访问不是很频繁。这时可以简单地在需要访问数据库时,就新创建一个连接,用完后就关闭它,这样做也不会带来什么明显的性能上的开销。但是对于一个复杂的数据库应用,情况就完全不同了。频繁的建立、关闭连接,会极大的减低系统的性能,因此对于连接的使用成了系统性能的瓶颈...
  • ToBeTheEnder
  • ToBeTheEnder
  • 2016-10-17 21:21
  • 3811

各种数据库连接池对比

主要功能对比 Druid BoneCP DBCP C3P0 Proxool JBoss Tomcat-Jdbc LRU 是 否 是 否 是 是 ? PSCache 是 是 是 是 否 否 是 PSCache-Oracle-Optimized 是 否 否 否 否 否 否 ExceptionSorter...
  • Bleachswh
  • Bleachswh
  • 2016-11-15 20:12
  • 858

数据库连接池概念

该文章来自于阿里巴巴技术协会(ATA)精选文章。 这次我们来聊聊数据库的连接, 因为我觉得这是蛮有内容且蛮重要的一部分内容。首先会从单个的连接池讲起,重点考察下单连接池和数据库的交互情况, 然后探讨下大规模集群下数据库连接会遇到的问题,以及对应的解法。 首先什么是连接池,出现的原因是啥?...
  • haonan108
  • haonan108
  • 2016-08-23 09:49
  • 699

数据库连接池的作用与基本原理

1. 基本原理:在内部对象池中,维护一定数量的数据库连接,并对外暴露数据库连接的获取和返回方法。 如外部使用者可通过getConnection方法获取数据库连接,使用完毕后再通过releaseConnection方法将连接返回,注意此时的连接并没有关闭,而是由连接池管理器回收,并为下一次使用做好准...
  • qq_18433441
  • qq_18433441
  • 2016-12-14 10:55
  • 3434

一个简单的java数据库连接池

import java.sql.Connection; import java.sql.DatabaseMetaData; import java.sql.Driver; import java.sql.DriverManager; import java.sql.Resul...
  • woshiwu
  • woshiwu
  • 2012-02-27 14:13
  • 2086
    个人资料
    • 访问:1304230次
    • 积分:18985
    • 等级:
    • 排名:第558名
    • 原创:459篇
    • 转载:0篇
    • 译文:5篇
    • 评论:149条
    WeChat
      欢迎关注我的公众号,干货只有干货,还有更多惊喜和资源在等着你
    博客专栏