小工匠

show me the code ,change the world

Apache-DBCP数据库连接池解读

概述

官网: 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.

阅读更多

扫码向博主提问

去开通我的Chat快问

yangshangwei

博客专家

show me the code
  • 擅长领域:
  • Java
  • Android
  • DataBase
  • OS
  • 开源软件
文章标签: dbcp apache
所属专栏: Spring-JDBC手札
想对作者说点什么? 我来说一句

Apache-DBCP数据库连接池

2017年11月14日 1.52MB 下载

Apache-dbcp基本配置过程

2018年03月17日 39KB 下载

三大连接池的参数说明

2011年08月30日 23KB 下载

数据库连接池的基本原理

2008年12月15日 4KB 下载

连接池配置

2011年10月29日 24KB 下载

数据库连接池-jar包

2010年03月16日 164KB 下载

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭