关于DBCP数据库连接池配置整理

合集下载

jdbc数据库连接的基本参数

jdbc数据库连接的基本参数

JDBC数据库连接的基本参数1. 什么是JDBC?Java Database Connectivity(JDBC)是一种用于在Java应用程序和数据库之间建立连接的API。

它允许开发人员使用标准的SQL语句来访问和操作数据库。

JDBC提供了一种通用的方式来连接各种类型的数据库,包括关系型数据库(如MySQL、Oracle、SQL Server等)和非关系型数据库(如MongoDB、Redis等)。

2. JDBC连接的基本参数在使用JDBC连接数据库时,需要指定一些基本参数。

以下是常用的JDBC连接参数:•URL:表示要连接的数据库的地址。

不同类型的数据库有不同格式的URL,例如MySQL的URL格式为jdbc:mysql://hostname:port/database,其中hostname为主机名,port为端口号,database为要连接的数据库名称。

•Driver Class:表示要使用的驱动程序类名。

每个数据库供应商都提供了自己特定类型数据库驱动程序类。

•Username:表示要登录到数据库时使用的用户名。

•Password:表示要登录到数据库时使用的密码。

3. JDBC连接示例下面是一个使用JDBC连接MySQL数据库的示例:import java.sql.Connection;import java.sql.DriverManager;import java.sql.SQLException;public class JdbcExample {public static void main(String[] args) {String url = "jdbc:mysql://localhost:3306/mydatabase";String username = "root";String password = "password";try {// 加载MySQL驱动程序Class.forName("com.mysql.jdbc.Driver");// 建立数据库连接Connection connection = DriverManager.getConnection(url, username,password);// 执行SQL查询或更新操作// 关闭数据库连接connection.close();} catch (ClassNotFoundException e) {e.printStackTrace();} catch (SQLException e) {e.printStackTrace();}}}在上面的示例中,我们首先加载MySQL驱动程序,然后使用DriverManager.getConnection()方法来建立与数据库的连接。

Java使用独立数据库连接池(DBCP为例)

Java使用独立数据库连接池(DBCP为例)

Java使⽤独⽴数据库连接池(DBCP为例)⽬前,绝⼤多数的软件系统都会使⽤数据库,⽽在软件构建起来之后,访问数据库⼜成为软件系统性能的短板(I/O操作)。

⼀般来说⼀次访问数据库就需要⼀个数据库连接。

⽽每次创建数据库连接都需要访问,分配空闲资源,占⽤资源,释放资源,结束访问。

⾮常的耗费时间和空间。

于是数据连接池技术便产⽣了,其原理就是在数据请求⽅和数据库之间建⽴⼀个数据库连接管理层。

在系统启动的时候就分配⼀定数量的连接,并维护这些连接,保持最低数量的连接数。

同时为了保护数据库和系统,设置⼀个最⼤连接数,缓解数据库的访问压⼒。

这样在每次数据请求⽅需要连接时,管理器便分配⼀个连接给数据请求⽅,数据请求⽅使⽤完连接后,将连接归还给管理器,这样就尽可能的减少不必要的数据库连接消耗。

在Java的数据库服务JDBC中并没有提供⼀个实际ConnectionPool实现,但是留出了接⼝以⽀持第三⽅服务提供商,我觉得其中最重要的接⼝是DataSource。

实际上Java访问数据库的⽅式主要有四种:⼀、使⽤DriverMananger来直接编程实现,这种是最基本的⽅式。

DriverMananger实现数据库连接的关键步骤为:1>Class.forName("com.ibm.db2.jcc.DB2Driver").newInstance();2>Connection conn = null;3>conn = DriverManager.getConnection(url, "name", "password");⼆、使⽤服务器配置⽂件来实现连接池。

⼀些服务器提供了⾃⼰的数据库连接池服务,例如Tomcat服务器就提供了由commons-DBCP⽀持的数据池连接服务,只需要在context.xml 中填写相应的数值就可以了。

三、配置⽂件配置 datasourceDataSource是在JavaAPI中提供的⼀个接⼝,第三⽅服务在实现了DataSource之后,例如DBCP的BasicDataSource,为了提⾼数据库连接池的可配置性,便利⽤IOC模式(控制反转),将实际的Bean与配置数据分开,配置数据放在配置⽂件中(⼀般使⽤XML)。

dbcp数据库连接池

dbcp数据库连接池

1.新建properties配置文件,配置信息如下:dataSource.driverClassName=oracle.jdbc.OracleDriver dataSource.url=jdbc:oracle:thin:@127.0.0.1:1521:orcl ername=kqtestdataSource.password=kqtest#<!-- 初始化连接-->dataSource.initialSize=10#<!-- 最大空闲连接-->dataSource.maxIdle=20#<!-- 最小空闲连接-->dataSource.minIdle=5#最大连接数量dataSource.maxActive=50#<!-- 超时等待时间以毫秒为单位6000毫秒/1000等于60秒--> dataSource.maxWait=1000#是否在自动回收超时连接的时候打印连接的超时错误dataSource.logAbandoned=true#是否自动回收超时连接dataSource.removeAbandoned=true#超时时间(以秒数为单位)dataSource.removeAbandonedTimeout=1802.Java数据库连接池类,dbcp连接池public class DBUtil {private static DBUtil instance;private BasicDataSource dataSource;// 单例模式private DBUtil(){ }// 获取数据库连接实例public static DBUtil getInstance(){if (instance==null) {instance = new DBUtil();instance.init();}return instance;}// 获取数据源public DataSource getDataSource(){return dataSource;}// 获取数据库连接public Connection getConnection(){try {return dataSource.getConnection();} catch (SQLException e) {e.printStackTrace();System.err.println("获取数据库连接失败");}return null;}// 初始化数据源private void init(){ResourceBundle rb =ResourceBundle.getBundle("pany.util.database");this.dataSource = new BasicDataSource();this.dataSource.setDriverClassName(rb.getString("dataSource.drive rClassName"));this.dataSource.setUrl(rb.getString("dataSource.url"));this.dataSource.setUsername(rb.getString("ername"));this.dataSource.setPassword(rb.getString("dataSource.password"));this.dataSource.setInitialSize(Integer.parseInt(rb.getString("dat aSource.initialSize")));this.dataSource.setMaxIdle(Integer.parseInt(rb.getString("dataSou rce.maxIdle")));this.dataSource.setMinIdle(Integer.parseInt(rb.getString("dataSou rce.minIdle")));this.dataSource.setMaxActive(Integer.parseInt(rb.getString("dataS ource.maxActive")));this.dataSource.setMaxWait(Integer.parseInt(rb.getString("dataSou rce.maxWait")));}// 释放资源public static void release(Connection conn, Statement stmt, ResultSet rs){try {if (conn!=null) conn.close();} catch (SQLException e) {e.printStackTrace();System.err.println("Connection.close() failed...");}try {if (stmt!=null) stmt.close();} catch (SQLException e) {e.printStackTrace();System.err.println("Statement.close() failed...");}try {if (rs!=null) rs.close();} catch (SQLException e) {e.printStackTrace();System.err.println("ResultSet.close() failed...");}}// 处理sql语句:如果sql语句中含有问号……public static void handleSql(String sql, Object[] objects, PreparedStatement pst) throws SQLException{if (objects!=null && objects.length>0) {for (int i = 0; i < objects.length; i++) {pst.setObject(i + 1, objects[i]);}}}}。

DBCP配置详解

DBCP配置详解
dbcp(连接池)的基本配置 属性解释
1.initialSize :连接池启动时创建的初始化连接数量(默认值为0)
2.maxActive :连接池中可同时连接的最大的连接数(默认值为8,调整为20,高峰单机器在20并发左右,自己根据应用场景定)
3.maxIdle:连接池中最大的空闲的连接数,超过的空闲连接将被释放,如果设置为负数表示不限制(默认为8个,maxIdle不能设置太小,因为假如在高负载的情况下,连接的打开时间比关闭的时间快,会引起连接池中idle的个数 上升超过maxIdle,而造成频繁的连接销毁和创建,类似于jvm参数中的Xmx设置)
9.(默认为30分钟,可以适当做调整,需要和后端服务端的策略配置相关)
10.removeAbandonedTimeout :超过时间限制,回收没有用(废弃)的连接(默认为 300秒,调整为180)
11.removeAbandoned :超过removeAbandonedTimeout时间后,是否进 行没用连接(废弃)的回收(默认为false,调整为true)
4.minIdle:连接池中最小的空闲的连接数,低于这个数量会被创建新的连接(默认为0,调整为5,该参数越接近maxIdle,性能越好,因为连接的创建和销毁,都是需要消耗资源的;但是不能太大,因为在机器很空闲的时候,也会创建低于minidle个数的连接,类似于jvm参数中的Xmn设置)
5.maxWait :最大等待时间,当没有可用连接时,连接池等待连接释放的最大时间,超过该时间限制会抛出异常,如果设置-1表示无限等待(默认为无限,调整为60000ms,避免因线程池不够用,而导致请求被无限制挂起)
6.poolPreparedStatements:开启池的prepared(默认是false,未调整,经过测试,开启后的性能没有关闭的好。)

DBCP配置图文详解

DBCP配置图文详解

DBCP配置图文详解
在使用DBCP前的准备
1.正确安装并配置了JDK
2.正确安装了数据库,并启动了服务
3.开发工具eclipse
导入依赖的jar包
1.导入相关数据库提供的JDBCjar包
Mysql: mysql-connector-java-5.1.13-bin.jar
Oracle: ojdbc5.jar
Sqlserver: sqljdbc4.jar
2.导入DBCP提供的jar包
commons-dbcp-1.4.jar
3.DBCP还依赖两个jar包(因为DBCP中的池使用到了集合和池技术)
commons-collections-3.2.jar
commons-pool.jar
这里是sqlserver示例图:
配置DBCP配置文件
1.可以使用BasicDataSource用代码设置配置信息
2.也可是使用properties来组织配置信息
我觉得配置文件比较简单, 这里就介绍配置文件.DBCP通过配置文件创建数据源, 在配置文件中,可以指定这些数据源的属性
现在以sqlserver数据库为例,建立一个dbcpconfig.properties文件, 这个文件名称可以是任意
如果想查看所有的配置信息, 可以查看
mons.dbcp.BasicDataSourceFactory 这个类给我们提供的常量.
在程序中如何使用DBCP。

数据库连接池的配置与性能调整

数据库连接池的配置与性能调整

数据库连接池的配置与性能调整数据库连接池是一个重要的数据库技术,它允许应用程序与数据库建立和管理多个连接,从而提高应用程序的性能和可伸缩性。

本文将探讨数据库连接池的配置和性能调整方法,以帮助你更好地利用该技术。

1. 选择适当的连接池实现在选择数据库连接池实现时,应根据需求和数据库类型选择适合的实现。

常见的连接池实现有C3P0、DBCP和HikariCP等。

其中,HikariCP是目前性能最佳的连接池实现之一,具有低延迟和高吞吐量的优势。

它能够自动调整连接池的大小和提交队列的长度,以适应不同的负载情况。

2. 配置连接池参数连接池的性能很大程度上取决于配置参数的设置。

以下是一些常见的连接池参数以及它们的意义:- 最大连接数(maxConnections):连接池允许的最大连接数。

如果应用程序需要处理大量并发请求,可以适当增加此值,以便更好地满足需求。

然而,过高的值可能会导致资源浪费和性能下降。

- 最小空闲连接数(minIdle):连接池保持的最小空闲连接数。

适当设置此值可以提高连接的重用率,避免频繁的创建和销毁连接的开销。

- 连接超时时间(connectionTimeout):在连接请求提交后,连接池等待获取可用连接的最大时间。

如果超时时间过短,可能导致请求被拒绝。

反之,过长的超时时间可能导致资源浪费。

- 连接生命周期(maxLifetime):连接在连接池中的最大生存时间。

超过该时间的连接会被关闭和重新创建。

适当设置此值可以避免因连接不稳定而导致的性能问题。

除了上述参数,每个连接池实现还有其他特定的配置参数,请根据实际需求进行配置。

3. 监控连接池性能连接池的性能监控对于调整和优化至关重要。

可以通过连接池提供的监控功能获得关键指标,如活跃连接数、空闲连接数、等待连接请求数等。

通过监控连接池的性能指标,可以及时发现潜在的连接池问题,例如连接泄漏、性能瓶颈等。

可以使用连接池的管理界面或开源监控工具(如Druid和HikariCP提供的监控功能)来实现连接池性能的监控。

tomcat_dbcp连接池详解_王远

tomcat_dbcp连接池详解_王远

DBCP连接池详解深圳市拜特科技有限公司1编写目的本文详细介绍了DBCP连接池的各个配置参数的含义,并通过实际例子演示不同的参数设置可能参数的结果。

2适用对象项目实施人员3参考资料4知识文件主要内容4.1连接池知识简介总所周知建立数据库连接是一个非常耗时耗资源的行为,因此现代的Web中间件,无论是开源的Tomcat、Jboss还是商业的websphere、weblogic都提供了数据库连接池功能,可以毫不夸张的说,数据库连接池性能的好坏,不同厂商对连接池有着不同的实现,本文只介绍拜特公司使用较多的开源web中间件Tomcat中默认的连接池DBCP (DataBase connection pool)的使用。

4.2 Tomcat下配置连接池下面以tomcat5.5.26为例来介绍如何配置连接池1:需要的jar在tomcat的安装目录common\lib下有一个naming-factory-dbcp.jar,这个是tomcat 修改后的dbcp连接池实现,同时为了能够正常运行,还需要commons-pool.jar。

2:建立context文件进入到conf\Catalina\localhost新建一个上下文文件,文件的名称既为将来要访问是输入url 上下文名称,例如我们建立一个名为btweb的文件内容如下:<Context debug="0" docBase="D:\v10_workspace\build\WebRoot" reloadable="false"><Resourcename="jdbc/btdb1"type="javax.sql.DataSource"factory="org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory"username="v10"password="v10"driverClassName="oracle.jdbc.driver.OracleDriver"url="jdbc:oracle:thin:@127.0.0.1:1521:cahs"maxActive="5"maxIdle="3"maxWait="5000"removeAbandoned="true"removeAbandonedTimeout="60"testOnBorrow="true"validationQuery="select count(*) from bt_user"logAbandoned="true"/></Context>4.3参数分步介绍◆数据库连接相关username="v10"password="v10"driverClassName="oracle.jdbc.driver.OracleDriver"url="jdbc:oracle:thin:@127.0.0.1:1521:cahs"◆jndi相关name="jdbc/btdb1"type="javax.sql.DataSource"factory="org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory"factory默认是org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory,tomcat也允许采用其他连接实现,不过默认使用dbcp。

DBCP和C3P0连接池常用配置参数一览表

DBCP和C3P0连接池常用配置参数一览表

DBCP和C3P0连接池常用配置参数一览表DBCP配置<bean id="hospitalDataSource" class="mons.dbcp.BasicDataSource" destroy-method="close"><property name="driverClassName"><value>${jdbcHospital.driverClassName}</value></property> <property name="url"><value>${jdbcHospital.url}</value></property><property name="username"><value>${ername}</value></property><property name="password"><value>${jdbcHospital.password}</value></property><property name="initialSize" value="10" /><property name="maxActive" value="100" /><property name="maxIdle" value="30" /><property name="minIdle" value="10" /><property name="logAbandoned" value="true" /><property name="removeAbandoned" value="true" /><property name="removeAbandonedTimeout" value="1000" /><property name="maxWait" value="5000" /></bean>defaultAutoCommit:设置从数据源中返回的连接是否采用自动提交机制,默认值为true;defaultReadOnly:设置数据源是否仅能执行只读操作,默认值为false;maxActive:最大连接数据库连接数,设置为0时,表示没有限制;maxIdle:最大等待连接中的数量,设置为0时,表示没有限制;maxWait:最大等待秒数,单位为毫秒,超过时间会报出错误信息;validationQuery:用于验证连接是否成功的查询SQL语句,SQL语句必须至少要返回一行数据,如你可以简单地设置为:“select count(*) from user”;removeAbandoned:是否自我中断,默认是false ;removeAbandonedTimeout:几秒后数据连接会自动断开,在removeAbandoned为true,提供该值;logAbandoned:是否记录中断事件,默认为false;C3P0配置<bean id="hospitalDataSource" class="boPooledDataSource" destroy-method="close"><property name="driverClass" value="${jdbcHospital.driverClassName}" /><property name="jdbcUrl" value="${jdbcHospital.url}" /><property name="user" value="${ername}" /><property name="password" value="${jdbcHospital.password}" /><property name="maxPoolSize" value="60" /><property name="minPoolSize" value="10" /><property name="initialPoolSize" value="10" /><property name="breakAfterAcquireFailure" value="true" /><property name="testConnectionOnCheckout" value="true" /><property name="testConnectionOnCheckin" value="true" /></bean>C3P0拥有比DBCP更丰富的配置属性,通过这些属性,可以对数据源进行各种有效的控制:acquireIncrement:当连接池中的连接用完时,C3P0一次性创建新连接的数目;acquireRetryAttempts:定义在从数据库获取新连接失败后重复尝试获取的次数,默认为30;acquireRetryDelay:两次连接中间隔时间,单位毫秒,默认为1000;autoCommitOnClose:连接关闭时默认将所有未提交的操作回滚。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1.简介
DBCP(DataBase Connection Pool),数据库连接池。

是 apache 上的一个 java 连接池项目,也是tomcat 使用的连接池组件。

单独使用dbcp需要3个包:common-dbcp.jar,common-pool.jar,common-collections.jar由于建立数据库连接是一个非常耗时耗资源的行为,所以通过连接池预先同数据库建立一些连接,放在内存中,应用程序需要建立数据库连接时直接到连接池中申请一个就行,用完后再放回去。

dbcp提供了数据库连接池可以在spring,iBatis,hibernate中调用dbcp完成数据库连接,框架一般都提供了dbcp连接的方法;
tomcat中也提供了dbcp的jndi设置方法,也可以不在框架中使用dbcp,单独使用dbcp 需要3个包:common-dbcp.jar,common-pool.jar,common-collections.jar
2.参数说明
翻译自
这里可以开启PreparedStatements池. 当开启时, 将为每个连接创建一个statement 池,并且被下面方法创建的PreparedStatements将被缓存起来:
●public PreparedStatement prepareStatement(String sql)
●public PreparedStatement prepareStatement(String sql, int resultSetType, int
resultSetConcurrency)
如果容许则可以使用下面的方式来获取底层连接:
Connection conn = ds.getConnection();
Connection dconn = ((DelegatingConnection) conn).getInnermostDelegate();
...
conn.close()
默认false不开启, 这是一个有潜在危险的功能, 不适当的编码会造成伤害.(关闭底层
连接或者在守护连接已经关闭的情况下继续使用它).请谨慎使用,并且仅当需要直接访问驱动的特定功能时使用.
注意: 不要关闭底层连接, 只能关闭前面的那个
如果开启"removeAbandoned",那么连接在被认为泄露时可能被池回收. 这个机制在(getNumIdle() < 2) and (getNumActive() > getMaxActive() - 3)时被触发。

举例当maxActive=20, 活动连接为18,空闲连接为1时可以触发"removeAbandoned".但是活动连接只有在没有被使用的时间超过"removeAbandonedTimeout"时才被删除,默认300秒.在resultset中游历不被计算为被使用。

3.使用注意点
1)如果maxIdle 设置太低,在高负载系统中,连接的打开时间比关闭的时间快,会引起
连接池中的idle的个数上升超过maxIdle,造成频繁的销毁和创建,类似于jvm参数
中的Xmx设置。

2)minIdle,该参数越接近maxIdle,性能越好,因为连接的创建和销毁,都是需要消耗
资源的,但是不能太大,因为在机器很空闲的时候,也会创建低于minIdle个数的连接,
类似于jvm参数中的Xms设置。

3)PreparedStatements会在数据库中保持打开的游标,这样会造成一个连接超出数据库
游标限制, 特别是当maxOpenPreparedStatements 被设置成 default (unlimited),
并且应用在一个连接上创建了大量不同PreparedStatements时,为了避免这个问题,
maxOpenPreparedStatements 应该设置为一个小于数据库在一个连接上允许打开最大
游标数。

4)poolPreparedStatements,经过测试,开启后的性能没有关闭的好,或者相差不大,没
有本质的提高。

5)对性能影响比较大的两个参数:
testOnBorrow:这个默认的之是true,对性能影响很大,因为每次从池中借出对象时进行一次
验证,系统开销很大,实际测试中发现,性能差距有7-10倍的样子。

maxIdle:如果这个参数的值比maxActive低,在高负载的情况下就会产生很多time_waited线
程。

根据我们的测试结果,这个值最好和maxActive相同或者是设成-1。

这样才能在高并发下,
应用到数据库的连接也是稳定的使用固有的connection。

否则dbcp会频繁创建新的连接,丢弃
老的连接。

而创建连接这个操作,比验证还要昂贵。

由于将maxIdle设置了一个比较高的值,应用就会在系统高峰时期创建的连接就会维持在那里。

在空闲的时候这些连接就显得有些浪费。

很多的时候数据库机器可能会支持多个应用,或者一个
集群可能会有很多台应用机器。

为了能这些空闲连接能够回收,就必须设置着一个配置项。

这个
值和minEvictableIdleTimeMillis以及numTestsPerEvictionRun会影响evictor thread的行为。


认timeBetweenEvictionRunsMillis的值是-1,就是不会运行。

但是如果它设了一个不为-1的值,
那么minEvictableIdleTimeMillis就不能设置的太短,默认的30分钟是个不错的选择。

4.配置样例
<bean id=“dataSource” class=“mons.dbcp.BasicDataSource” destroy- method=“close”> <property name=“driverClassName” value=“${db_driverClassName}” />
<property name=“url” value=“${db_rul}” />
<property name=“username” valu e=”${db_user}” />
<property name=“password” value=”${db_passwd}” />
<property name=“maxActive”value=”${db_maxActive }” />
<property name=“initialSize”value=”${db_initialSize}” />
<property name=“maxWait”value=”${db_maxWait}” />
<property name=“maxIdle”value=”${db_maxIdle }” />
<property name=“minIdle”value=”${db_minIdle}” />
<property name="timeBetweenEvictionRunsMillis" value="30000" />
<property name="testOnBorrow" value="false" />
<property name="testWhileIdle" value="true" />
<property name="validationQuery" value="select 1 from dual" />
<property name=“removeAbandoned”value=”true” />
<property name=“removeAbandonedTimeout”value=”180” />
</bean>。

相关文档
最新文档