《JDBC连接技术》"江南月"(二)常用的连接池dbcp、c3p0、druid

《MySQL数据库》之练习表数据:emp表与dept表的脚本整理 一、Oracle版本 1、dept表 drop table dept; CREATE TABLE dept(     deptno NUMBER(2),     dname VARCHAR2(14) ,     loc VARCHAR2(13)  ) ; INSERT INTO dept VALUES(10,'ACCOUNTING','NEW YORK'); INSERT INTO d... 阅读详情

我们应该知道,在进行数据库连接的时候,是极其消耗时间和性能的。如果每次对数据库进行操作,都要进行一次Connection,那么,可想而知,性能有多么的差。你要知道,一个大型的web应用,同一时间就可能有成千上万个访问数据库的请求,并且数据库服务器能供同时创建的Connection数目也是有限的。

因此,问题来了。怎么最大限度的利用这些有限资源呢?

数据库连接池的技术出现,解决了这一问题。连接池技术就是预先创建多个连接对象,保存到连接池中,当有客户请求时,从池中取出一个连接对象为客户服务,当请求完成后,客户程序调用close方法,将连接对象归还给连接池,已备其他客户使用,而不是真正的断开连接。这样就避免了每次请求都创建连接对象所带来的性能开销。

我这里简单的介绍一下常用的连接池技术:DBCP,C3P0,还有阿里的Druid。

1.DBCP

DBCP(DataBase connection pool)数据库连接池。是 Apache 上的一个 Java 连接池项目,也是 tomcat 使用的连接池组件。单独使用DBCP需要2个包:commons-dbcp.jar和commons-pool.jar。由于建立数据库连接是一种非常耗时、耗资源的行为,所以通过连接池预先同数据库建立一些连接,放在内存中,应用程序需要建立数据库连接时直接到连接池中申请一个就行,使用完毕后再归还到连接池中。数据库连接的释放和断开,由程序自动管理,大大方便了开发人员。

我使用的是dbcp2.0版本以上的jar包,如下:

不管使用哪种连接池技术,原理都是一样的,而常用的配置都是一样的,顶多配置参数的名称不同而已。下面介绍一下dbcp2.0版本以上的常用的配置参数(配置信息是写在src下的db.properties中的形式)

#要连接的数据库的driverClassName
driverClassName=com.mysql.jdbc.Driver
#要传递给JDBC驱动程序以建立连接的连接URL。
url=jdbc:mysql://localhost:3306/db_test
#要传递给JDBC驱动程序以建立连接的连接用户。
username=root
#要传递给JDBC驱动程序以建立连接的连接密码。
password=mmforu
#同时从这个池中分配的活动连接的最大数量,或者为负,没有限制。dbcp1.0叫maxActive
maxTotal=20
#启动连接池时创建的初始连接数。
initialSize=1
#池在抛出异常之前(当没有可用连接时)等待返回连接的最大毫秒数,或者<= 0无限期等待。
maxWaitMillis=60000
#最大空闲连接:连接池中容许保持空闲状态的最大连接数量,超过的空闲连接将被释放,如果设置为负数表示不限制
maxIdle=8
#池中可以保持空闲的活动连接的最小数量
minIdle=3

封装一个DBUtil工具类:

import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Properties;

import org.apache.commons.dbcp2.BasicDataSource;

public class DBUtil {
	//定义一个静态的连接池对象
	private static BasicDataSource pool = new BasicDataSource();
	static {
		try {
			//创建一个Properties对象,加载db.properties里的配置信息
			Properties prop = new Properties();
			InputStream is = DBUtil.class.getClassLoader().getResourceAsStream("db.properties");
			//加载配置信息
			prop.load(is);
			//设置连接池常用属性
			pool.setDriverClassName(prop.getProperty("driverClassName"));
			pool.setUrl(prop.getProperty("url"));
			pool.setUsername(prop.getProperty("username"));
			pool.setPassword(prop.getProperty("password"));
			pool.setMaxTotal(Integer.parseInt(prop.getProperty("maxTotal")));
			pool.setInitialSize(Integer.parseInt(prop.getProperty("initialSize")));
			pool.setMaxWaitMillis(Long.parseLong(prop.getProperty("maxWaitMillis")));
			pool.setMaxIdle(Integer.parseInt(prop.getProperty("maxIdle")));
			pool.setMinIdle(Integer.parseInt(prop.getProperty("minIdle")));
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	public static Connection getConnection() throws SQLException {
		return pool.getConnection();
	}

	public static void close(Connection conn) {
		if (conn != null) {
			try {
				conn.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
	}
        public static void main(String[] args) {
		try {
			Connection conn = getConnection();
			System.out.println(conn);
			close(conn);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

工具类写好了,对数据库的增删改查操作,这里就不做测试了!!!!没有必要。

2.C3P0

关于c3p0的配置,我这里只介绍xml配置文件的写法。至于properties配置文件的写法就不累述了,参考上述的dbcp,稍微注意一下参数名就行了。种是通过在同src目录下的c3p0-conflg.xml文件或者c3p0.properties文件进行相关的配置。

我用的是如下jar包

我们将c3p0-config.xml文件放置在src目录下,常用属性如:

<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>
    <!-- 默认配置,如果没有指定则使用这个配置 -->
    <default-config>
        <property name="user">root</property>
        <property name="password">mmforu</property>
        <property name="jdbcUrl">jdbc:mysql://localhost:3306/db_test</property>
        <property name="driverClass">com.mysql.jdbc.Driver</property>
        <!-- 当连接池中的连接用完时,C3P0一次性创建新连接的数目 -->
        <property name="acquireIncrement">10</property>
        <!-- 连接池中保留的最大连接数 -->
        <property name="maxPoolSize">50</property>
        <!-- 连接池中保留的最小连接数 -->
        <property name="minPoolSize">2</property>
        <!-- 初始化时创建的连接数,应在minPoolSize与maxPoolSize之间取值。默认为3; -->
        <property name="initialPoolSize">5</property>
        <!-- 最大空闲时间,超过空闲时间N秒的连接将被丢弃。为0或负数则永不丢弃。默认为0; -->
        <property name="maxIdleTime">600</property>
    </default-config>
</c3p0-config>

封裝DBUtil工具类

import java.sql.Connection;
import java.sql.SQLException;

import com.mchange.v2.c3p0.ComboPooledDataSource;

public class DBUtil {
	//定义一个静态的c3p0的连接池属性,利用构造器加载src下的配置文件,c3p0会自动装置配置信息
	private static ComboPooledDataSource pool = new ComboPooledDataSource("c3p0-config");
	/**
	    * 获取连接池中的一个连接对象
	 */
	public static Connection getConnection() throws SQLException {
		return pool.getConnection();
	}

	public static void close(Connection conn) {
		if (conn != null) {
			try {
				conn.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
	}
	//测试连接
	public static void main(String[] args) throws SQLException {
		Connection conn = getConnection();
		System.out.println(conn);
		close(conn);
	}
}

同样的,我不做测试了。

3.Druid

Druid是阿里巴巴开发的号称为监控而生的数据库连接池,Druid是目前最好的数据库连接池,在功能、性能、扩展性方面,都超过其他数据库连接池,同时加入了日志监控,可以很好的监控DB池连接和SQL的执行情况。

我使用的jar包是:

 

可以使用properties配置文件,将db.properties配置文件放在src目录下:

driverClassName=com.mysql.jdbc.Driver
jdbcurl=jdbc:mysql://localhost:3306/db_test
username=root
password=mmforu
#启动连接池时,初始化连接的个数
initialSize=5
#连接池中最大连接数
maxActive=20
#获取连接时最大等待时间,单位毫秒。配置了maxWait之后,缺省启用公平锁,并发效率会有所下降,如果需要可以通过配置useUnfairLock属性为true使用非公平锁。
maxWait=3000
#最大空闲连接数,已经弃用,配置了也没作用
maxIdle=6
#最小空闲连接数
minIdle=3

编写DBUtil工具类:

import java.sql.Connection;
import java.sql.SQLException;
import java.util.Properties;

import javax.sql.DataSource;

import com.alibaba.druid.pool.DruidDataSourceFactory;

public class DBUtil {
	private static DataSource source;
	static {
		try {
			Properties prop = new Properties();
			prop.load(DBUtil.class.getClassLoader().getResourceAsStream("db3.properties"));
			//调用工厂类的静态方法,获取连接池
			source = DruidDataSourceFactory.createDataSource(prop);
		} catch (Exception e) {
			e.printStackTrace();
		}

	}

	public static Connection getConnection() throws SQLException {
		return source.getConnection();
	}

	public static void close(Connection conn) {
		if (conn != null) {
			try {
				conn.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
	}

	public static void main(String[] args) throws SQLException {
		Connection conn = getConnection();
		System.out.println(conn);
		close(conn);
	}

}

ok,如果想要知道三个连接池技术的详细参数,请先百度吧,等有时间,我再整理他们的详细参数。

--------------------------------------------------------------------------如有疑问,敬请留言---------------------------------------------------------------------------

 

 

 

 

 

 

 

 

 

 

 

 

 

 

mariadb jdbc(连接列子有jar包) java 连接mariadb内有jar包,可行,你懂得 立即下载

相关推荐

【嵌入式】树莓派部署NCNN的YOLOv5模型

树莓派部署NCNN框架的YOLOv5模型

Ace_Spade的博客 3783

c3p0、dbcp和proxool比较

现在常用的开源数据连接池主要有c3p0、dbcp和proxool三种,其中: hibernate开发组推荐使用c3p0; spring开发组推荐使用dbcp(dbcp连接池有weblogic连接池同样的问题,就是强行关闭连接或数据库重启后,无法reconnect,告诉连接被重置,这个设置可以解决); hibernate in action推荐使用c3p0和proxool; dbcp所需jar:...

weixin_33856370的博客 218

嵌入式充电协议深度解析:从QC到PD3.1的技术演进与实战应用

本文深入解析了从QC到PD3.1的嵌入式充电协议技术演进与实战应用。通过电压谈判、协议芯片设计、Type-C接口优化等关键技术,详细介绍了快充协议在嵌入式系统中的实现挑战与解决方案,包括兼容性测试、EMC问题处理及空间限制创新设计,为开发者提供了宝贵的实践经验。

weixin_29194817的博客 421

DBCP连接池与C3P0连接池

DBCP连接池与C3P0连接池的比较 如果一个项目中如果需要多个连接,如果一直获取连接,断开连接,这样比较浪费资源,如果创建一个池,用池来管理Connection,这样就可以重复使用Connection。有了池我们就不用自己来创建Connection,而是通过池来获取Connection对象。当使用完Connection后,调用Connection的close()方法也不会

没有所谓的命运,只有不同的选择! 2万+

zynq-7000学习笔记(八)——USB摄像头图像采集

PC平台:WINDOWS 10 64位 Xilinx设计开发套件:Xilinx_vivado_sdk_2015.4 开发板:Zed Board USB摄像头:罗技 C270(720P) linux源码:2016_R1 一、配置linux,支持UVC       如果是中星微的ZC3XX系列的芯片,则要进到GSPCA把ZC3XX的驱动选上

luotong86的专栏 1万+

群晖Hyper Backup还原实战:加密与非加密备份的完整操作指南

本文详细介绍了群晖Hyper Backup在加密与非加密备份场景下的完整还原操作指南。通过实战案例和高级技巧,帮助用户应对硬盘故障或系统崩溃时的数据恢复挑战,特别是加密备份恢复中的关键节点和常见陷阱。

weixin_29323365的博客 441

c3p0数据库连接池的三种配置方式(java代码、xml文件、properties文件)

数据库连接池 JDBC开发流程 加载驱动(只加载一次) 获取数据库连接(Connection) 执行 SQL 语句(Statement) ResultSet 接收结果集 断开连接,释放资源 数据库连接对象是通过 DriverManager 得到的,每次获取都要向数据库申请获取连接,并验证用户名、密码,执行完 SQL 语句后,断开连接,这样的方式会造成资源的浪费,因为连接对象只使用了一次就释放掉了,下一次连接还要继续向数据库申请,相当于用一部手机打电话,打了一通电话就把手机扔掉了,需要下一次通话时,在买一

很简单_的博客 5769

从零到一:手把手教你用STM32和WiFi打造智能温室大棚的物联网核心

本文详细介绍了如何利用STM32单片机和WiFi技术从零构建智能温室大棚的物联网核心系统。内容涵盖硬件选型、传感器集成、低功耗WiFi通信、自动控制逻辑及OLED显示,提供实际部署中的优化技巧和故障排查方案,帮助开发者打造稳定可靠的农业自动化解决方案。

c7d8e的博客 180

java dbcp连接池 使用_Java使用DBCP连接池

DBCP 是 apache 上的一个 java 连接池项目,也是 tomcat 使用的连接池组件。单独使用dbcp需要3个包:common-dbcp.jar,common-pool.jar,common-collections.jar。package cn.com.***;import com.google.gson.Gson;import org.apache.commons.dbcp2.Bas...

weixin_30345873的博客 440

让闲置 MacBook 当 OpenClaw 主机:合盖运行 + 后台常驻

摘要 本文详细介绍如何将闲置MacBook改造为OpenClaw服务器,实现合盖后持续运行。首先推荐Ubuntu 22.04 LTS作为操作系统,提供详细的安装步骤和分区建议。重点介绍三种禁用合盖休眠的方法:修改systemd-logind配置、使用pm-utils工具以及调整GRUB设置。随后指导如何安装Docker并部署OpenClaw服务,包括创建docker-compose.yml文件和配置环境变量。最后说明如何设置系统服务实现OpenClaw开机自启。通过以上配置,可使MacBook在合盖状态下7

一键难忘的博客 4657

【100%通过率】华为OD机试真题 C++ 实现【水库蓄水问题】【2022.11 Q4 新题】

给定一个长度为 n 的整数数组height。数组的元素表示山的高度,选择两个元素作为水库的边界,求蓄水量的最大值并输出蓄水量最大时的边界下标(蓄水量相同时输出下标较近的)。

MISAYAONE的博客 1万+

DBCP和C3P0

DBCP 要写一个dbcp.properties配置文件 导包: package bull03.DBCP; import java.io.FileInputStream; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.util....

BullZeng的博客 330

Python爬虫技术应用:体育赛事直播数据抓取与分析

Web爬虫(Web Crawling)是一种通过模拟浏览器行为从网站获取数据的技术。发送请求:发送HTTP请求(通常是GET或POST请求)获取目标网页的HTML内容。解析网页:使用解析工具(如lxml)从HTML中提取出所需要的信息。存储数据:将抓取到的数据存储到数据库、文件或数据结构中,供后续分析和使用。数据分析与展示:使用数据分析工具(如PandasMatplotlib)对数据进行处理、清洗和可视化,生成有价值的报告和图表。Requests:用于发送静态网页的HTTP请求并获取响应。

2201_76125261的博客 1309

c3p0和dbcp的使用和区别

数据库连接现在常用的开源数据连接池主要有c3p0、dbcp和proxool三种:一、spring配置文件引入     &lt;!-- 配置dbcp数据源 --&gt; &lt;bean id="dataSource2" destroy-method="close" class="org.apache.commons.dbcp.BasicDataSource"&gt; ...

retry000的博客 1万+

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

DBCP和C3p0,我叫他们基本池和组合池,根据字面意思理解

数据库连接池有两种扩展包一,DBCP实现的方式commons-dbcp-1.4.jar : 连接池的实现commons-pool-1.5.6.jar : 连接池实现的依赖库使用DBCP的方式有两种,一种是手动配置,一种是配置文件配置。手动配置 BasicDataSourse ,BasicDataSource ds = new BasicDataSource();根据字面意思,可以叫做基本连接池然后...

CR2018博客 425

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

JDBC以及数据源整合(DBCP、Druid、C3P0)

准备步骤: 创建数据库(这里只需要一个user和一个acount表) user包含id,username,pwd acount包含id,money 我的数据库名为mybatis,你们记得要改成自己的数据库名字(在URL那里) jdbc:mysql://localhost:3306/改成自己数据库名字?serverTimezone=GMT%2B8&useSSL=false&useUnicode=true&characterEncoding=UTF-8 创建maven项

weixin_45607293的博客 303

dbcp2连接池配置_JedisPool连接池相关配置

点击上方☝SpringForAll社区轻松关注!及时获取有趣有料的技术文章本文来源:http://yeming.me/2017/07/08/jedisPoolConfig/最近有些其他业务部门的同学在线上环境redis有出现以下错误Unexpected end of stream,这个错误大致是因为,redis服务器端已经关闭了客户端的连接,而客户端不知道依然拿着原来的连接去访问red...

weixin_39570530的博客 453

数据库连接池-DBCP、C3P0、Druid

1. 数据库连接池 简介 ​ 实际开发中“获得连接”或“释放资源”是非常消耗系统资源的两个过程,为了解决此类性能问题,通常情况我们 采用连接池技术,来共享连接Connection。这样我们就不需要每次都创建连接、释放连接了,这些操作都交 给了连接池。 如何使用连接池: ​ Java为数据库连接池提供了公共的接口:javax.sql.DataSource,各个厂商需要让自己的连接池实现这个接口。 这样应用程序可以方便的切换不同的连接池!DBCP、C3P0、Druid 就是几个常用的连接池。 2. DBCP

mochen20的博客 560

java使用数据库连接池连接MySQL/MariaDB--DBCP2

如果每次操作数据库都需要重新连接数据库,那么会很浪费资源。因此建议使用数据库的连接池来满足多线程的数据库操作。 Java中数据库连接池有多种实现方法,一种方法是实现javax.sql.DataSource,但这种方法比较麻烦。 推荐使用DBCP,这是Apache 提供的数据库连接池的实现。 在Maven中添加如下依赖: <dependency> <groupI...

个人博客 1493

java项目开发实践经验之二:几种常见数据库连接池的使用比较

笔者曾经主持以及经历的几个产品及项目中,包括了各种数据库及应用服务器,基本上几种常见的数据库连接池都用到了,根据使用的情况把这些连接池比较一下吧。 感觉在介绍之前有必要阐述一下连接池的几个概念,有助于后边一些文字的理解。 最原始的数据库使用就是打开一个连接并进行使用,使用过后一定要关闭连接释放资源。由于频繁的打开和关闭连接对jvm包括数据库 都有一定的资源负荷,尤其应用压力较大时资源...

ZHBIT17612的专栏 913

常用的数据库连接池(DBCP连接池、C3P0、Druid)

文章目录一、数据库连接池二、DBCP连接池2.1 硬编码的格式2.2 properties配置文件格式三、C3P03.1 硬编码的格式3.2 properties配置文件的格式3.3 xml配置文件的格式四、Druid4.1 硬编码的格式4.2 properties配置文件格式五、Jar下载 一、数据库连接池 连接池:一个容器,里面放有一定数量的连接对象。可以高效的管理连接对象。 数据库连接是一种...

GXlbj23的博客 966

MySql的初学习 -- 第十四章 -- 数据库连接池(DBCP、C3P0、Druid)

MySql的初学习 -- 第十四章 -- 数据库连接池、DBUtils什么是连接池如何使用数据库连接池DBCP连接池编写工具类 博客说明 文章所涉及的资料来自互联网整理和个人总结,意在于个人学习和经验汇总,如有什么地方侵权,请联系本人删除,谢谢! 什么是连接池 开发中“获得连接”或“释放资源”是非常消耗系统资源的两个过程,为了解决此类性能问题,通常情况我们 采用连接池技术,来共享连接Connection,这就是连接池。 用池来管理Connection,这样可以重复使用Connection。 当使用完Co

港猫鱼未归的博客 298

常用数据库连接池 (DBCP、c3p0、Druid) 配置说明

1. 引言 1.1 定义 数据库连接是一种关键的有限的昂贵的资源,这一点在多用户的网页应用程序中体现得尤为突出。对数据库连接的管理能显著影响到整个应用程序的伸缩性和健壮性,影响到程序的性能指标。数据库连接池正是针对这个问题提出来的。 数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个;释放空闲时间超过最大空闲时间的数据库连接来避免因为...

weixin_30697239的博客 660

三种数据连接池技术:C3P0,DBCP,Druid的部署和配置

三种数据连接池技术:C3P0,DBCP,Druid的部署和配置

qq_42035161的博客 483

三大连接池(c3p0,Druid,dbcp)的使用

一.c3p0连接池 1.导入依赖(maven直接导入依赖库,不支持的下载jar包即可) <dependency> <groupId>com.mchange</groupId> <artifactId>c3p0</artifactId> <version>0.9.5.2</version> </dependency> mysq

weixin_53915541的博客 390
上一篇: XML与JSON的简介
下一篇: 《Linux系统》之"皮毛系列"(十)使用定时器进行时间同步
从明老师
博客等级 码龄8年 263粉丝 57原创
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值