JDBC-Mysql数据库连接池

news2024/11/15 8:19:38

传统数据库连接的弊端

在这里插入图片描述

一个java程序多个正常要开启多个mysql连接-正常开发中次数在1w次往上(还可能有多个java程序-并发编程),但是如果很多歌连接的话,数据库可能就瘫痪了

在这里插入图片描述
测试一个程序连接5000次
抛出一个,太多连接的异常
在这里插入图片描述
我们也开启完执行完就关闭
也有问题-效率太低
在这里插入图片描述
在这里插入图片描述
消耗大约7s钟

解决这些问题-数据库连接池技术

数据库连接池

在这里插入图片描述
1.介绍先在缓冲池中存一定量的连接,当java程序需要连接时候进行申请,用完后释放连接(不是关闭!),连接可以反复使用
2.数据库连接池进行连接的分配管理,释放
3.连接池连接不够用时,新申请的程序要进入等待队列
示意图
在这里插入图片描述
具体方法去调用我们连接池的连接,注意:我们释放连接,不是关闭,而是不用那个对象的引用了

数据库连接池种类

DataSource是所有这些连接池的接口
在这里插入图片描述

重点还是我们的C3P0!还有Druid!!!
下面会具体讲解
使用这两种需要导入相应的jar包

C3P0

赋值从网上下的jar包,项目中创建文件夹,复制到文件夹下面
右键jar包点击如下图的第一个有个ADD path什么的就导入成功了
在这里插入图片描述
最大连接数:需要在队列等待的临界值
最小连接数:连接池中最小连接(连接一直不用会回收,控制回收)
初始连接数:初始时候连接池的连接数
每次增长连接数:需要增加连接数的增长值,最大为最大连接数

代码

方式1

package yuan.hsp.JDBC.conchi;

import java.io.FileInputStream;
import java.sql.Connection;
import java.util.Properties;
import org.junit.jupiter.api.Test;
import com.mchange.v2.c3p0.ComboPooledDataSource;

//数据库C3P0数据库连接池
public class C3P0 {
	@Test
public void testc3p0_01() throws Exception {
	//1.创建一个数据源对象(实现DataSource接口)
	ComboPooledDataSource comboPooledDataSource = new ComboPooledDataSource();
	//2.通过配置文件获取相关信息
	Properties properties = new Properties();
	properties.load(new FileInputStream("src\\pra.properties"));
	String user=properties.getProperty("user");
	String password=properties.getProperty("password");
	String url=properties.getProperty("url");
	String driver=properties.getProperty("driver");
	//3.给数据源设置相关参数
	//注意我们连接管理由comboPooledDataSource来管理
	comboPooledDataSource.setDriverClass(driver);
	comboPooledDataSource.setJdbcUrl(url);
	comboPooledDataSource.setUser(user);
	comboPooledDataSource.setPassword(password);
	//4.设置初始连接数
	comboPooledDataSource.setInitialPoolSize(10);//设置初始为10个(就是连接池创建里面有多少个连接)
	//最大连接数
	comboPooledDataSource.setMaxPoolSize(50);//最大连接数为50(就是当你10个用完,还有想要用的,增加连接-最多到50个,第51个去队列等待)
	//测试一下效率
	long start = System.currentTimeMillis();
	//5.获取连接!核心
	for(int i=0;i<5000;i++) {
	Connection connection = comboPooledDataSource.getConnection();//这个方法是从DataSource接口实现的
	connection.close();//释放连接,底层不一样不过还是那个接口
	}
	long end = System.currentTimeMillis();
	System.out.println("耗费时间为"+(end-start));
}
}

在这里插入图片描述
365比上面的7099少很多
效率更高

方式2

利用C3P0提供的配置文件进行完成
对应文件名c3p0-config.xml
将该文件复制到src目录
该文件指定了连接数据库和连接池的相关参数
点击这个文件
可以进行相关参数的修改
在这里插入图片描述

把什么驱动类什么的改成我们的对应路径
还有用户密码什么的
也可以设置连接数什么的

在这里插入图片描述
注意这个最开始的这个是数据源名称
就这样几行简单的代码就ok了
因为其他的已经在xml文件了配置了

	@Test
	public void CP30test02() throws SQLException {
		ComboPooledDataSource comboPooledDataSource = new ComboPooledDataSource("hello");
		long start = System.currentTimeMillis();
		for(int i=0;i<5000;i++) {
			Connection connection = comboPooledDataSource.getConnection();
			connection.close();//这里是释放连接底层不一样
		}
		long end = System.currentTimeMillis();
		System.out.println("耗费时间为"+(end-start));
	}

在这里插入图片描述
也是可以连接成功且效率高的

德鲁伊连接池

这个效率来说最高
第一步还是加入jar包奥
就之前的步骤

package yuan.hsp.JDBC.conchi;

import java.io.FileInputStream;

import java.sql.Connection;
import java.util.Properties;
import javax.sql.DataSource;

import org.junit.jupiter.api.Test;

import com.alibaba.druid.pool.DruidDataSourceFactory;


//测试德鲁伊使用
public class Druid {
	
	@Test
public void testdruid() throws Exception {
	//1.jar包导入和配置文件加入到src目录下面
	//这个配置文件(properties)里面有各种数据库连接池的信息
	//-#max wait time (5000 mil seconds)特别解释一下这个是最长等待时间,等待超过这个时间,放弃等待下一次申请连接
	//2.创建properties读取
	Properties properties = new Properties();
	properties.load(new FileInputStream("src\\druid.properties"));
	//3.创建一个指定的数据库连接池
	DataSource createDataSource = DruidDataSourceFactory.createDataSource(properties);
	long start = System.currentTimeMillis();
	for(int i=0;i<5000;i++) {
	Connection connection = createDataSource.getConnection();
	connection.close();//这个不是关闭操作时间上是返还操作
	}
	long end = System.currentTimeMillis();
	System.out.println("消耗时间"+(end-start));
}
}

配置文件
在这里插入图片描述
记得不要有空格!
在这里插入图片描述
为什么这里393比之前C3P0的346高?
因为连接次数5000次其实是挺小的
50w次的话这个
德鲁伊比C3P0大

两种高处理量的效率对比

50w次的连接申请
C3P0
在这里插入图片描述
Druid在这里插入图片描述
显然Druid效率高一些

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/188133.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

离校毕业生刚去新的陌生城市,需要提高警惕的几点

很多大学毕业生其实阅历还不是特别的多&#xff0c;从小在自己熟悉的环境长大&#xff0c;即便是读了大学&#xff0c;可能也是在自己熟悉的学校附近活动&#xff0c;同学们集体出去逛个街&#xff0c;放假了就回家了。 但一旦大学毕业要离校&#xff0c;可能你会去一个陌生的新…

论文笔记:Learning Disentangled Representations of Video with Missing Data

2020 Neurips 1 intro & abstract 视频表征的一个挑战是高维、动态、各个像素之间多模态分布 最近的一些研究通过探索视频的inductive bias&#xff0c;并将高维数据映射到低微数据中—>这种方法通过将视频的各帧分解成语义上有意义的因子&#xff0c;来获得视频的解耦…

Maven初级(二)

目录 四.第一个Maven项目&#xff08;手工制作&#xff09; 4.1 Maven工程目录结构 4.2 手工制作Maven项目的步骤 4.2.1 手工制作项目的目录结构或使用插件创建项目的目录结构 4.2.2 在项目的src同层目录下创建pom.xml文件 4.2.3 在cmd中使用Maven项目构建命令 四.第一个…

自动驾驶感知——物体检测与跟踪算法|4D毫米波雷达

文章目录1. 物体检测与跟踪算法1.1 DBSCAN1.2 卡尔曼滤波2. 毫米波雷达公开数据库的未来发展方向3. 4D毫米波雷达特点及发展趋势3.1 4D毫米波雷达特点3.1.1 FMCW雷达角度分辨率3.1.2 MIMO ( Multiple Input Multiple Output)技术3.2 4D毫米波雷达发展趋势3.2.1 芯片级联3.2.2 专…

[docker]-docker安装prometheus和grafana

导语&#xff1a;需要排查部分出问题的私有化环境。直接上一个docker的node_exporter prometheus grafana 最方便。 所用到的安装包在最下面的云盘。 解压安装自定义node_exporter # 这个abc的包名可以忽略 tar zxvf abc.tgz cd abc cp node_exporter /usr/local/ cat <…

Mybatis 动态sql的编写|开启二级缓存

❤️作者主页&#xff1a;微凉秋意 ✅作者简介&#xff1a;后端领域优质创作者&#x1f3c6;&#xff0c;CSDN内容合伙人&#x1f3c6;&#xff0c;阿里云专家博主&#x1f3c6; ✨精品专栏&#xff1a;数据结构与课程设计 &#x1f525;系列专栏&#xff1a;javaweb 文章目录前…

Linux-主要目录

/: 根目录&#xff0c;一般根目录下只存放目录&#xff0c;在Linux下有且只有一个根目录&#xff0c;所有的东西都是从这里开始当在终端里输入 /home,其实是在告诉电脑&#xff0c;先从/&#xff08;根目录&#xff09;开始&#xff0c;再进入到home目录/bin、/usr/bin:可执行二…

java基于ssm的旅游景点门票预订网站

通过本系统&#xff0c;能够实现用户进行登录后&#xff0c;在网站上对旅游景点信息进行门票预订&#xff0c;也可以通过在线留言系统&#xff0c;了解景点相关信息&#xff0c;为用户提供全方位的服务&#xff0c;同时为节省用户的时间&#xff0c;本系统采用分地名的方式&…

2022尚硅谷SSM框架跟学(七)Spring MVC基础二

2022尚硅谷SSM框架跟学 七 Spring MVC基础二4.SpringMVC获取请求参数4.1.通过ServletAPI获取4.2.通过控制器方法的形参获取请求参数4.3.RequestParam4.4.RequestHeader4.5.CookieValue4.6.通过POJO获取请求参数4.7.解决获取请求参数的乱码问题5.域对象共享数据5.1.使用ServletA…

LCX端⼝转发

LCX是一款十分经典的内网端口转发工具&#xff0c;基于Socket套接字&#xff0c;具有端口转发和端口映射的功能。但是目前很多杀软已经将其加入了特征库&#xff0c;在实际利用的时候需要自行做免杀处理。lcx有三个功能&#xff1a;第一个功能将本地端口转发到本地另一个端口上…

红米10A 一键root教程 跳过 秒过 168小时解锁BL 限制完美面具root保数据救黑砖刷机 解决无法解锁BL 新版本问题

新版本红米10A 无法秒解锁BL。root bootloader 要刷机、线刷救砖、获取Root权限都需要解除bootloader锁 我们称解除刷机限制的这个操作就叫解锁BL&#xff0c;只有解锁BL后&#xff0c;才可以进行刷机、刷Root权限等等一些列的操作。&#xff08;注&#xff1a;bootloader锁不…

Spring为什么这么火 之 五大类注解

目录 前言 存储Bean对象 1、配置扫描路径 2、将Bean存储到容器中 2.1、5大注解实现&#xff08;Controller、Service、Repository、Component、Configuration) Controller Service Repository Configuration Component 为什么需要五个类注解&#xff1f; 五大类注解的关…

Jmeter分布式

Jmeter的分布式控制&#xff0c;就是指远程启动功能。执行原理&#xff1a; 1、一台作为调度机(master)&#xff0c;其它机器做为执行机(slave) 2、执行时&#xff0c;master会把脚本发送到每台slave上&#xff0c;slave 拿到脚本后就开始执行 3、执行完成后&#xff0c;sla…

go语言编译文件踩坑

目录 1 no required module provides package xxx go.mod file not found in current directory or any parent directory; see go help modules 方式1 执行 go env -w GO111MODULEauto后再编译 方式2 创建go.mod 2 报错syscall.go:84:16: undefined: unsafe.Slice 3 b…

ArrayList集合类和对象数组案例区别讲解

目录 对象数组案例讲解 集合 ArrayList类的构造方法和成员方法 对象数组案例讲解 创建一个学生数组&#xff0c;存储三个学生对象并遍历 package com.demo01; /*** * author 无限嚣张菜菜* 分析&#xff1a;* A&#xff1a;定义学生类* B&#xff1a;创建学生数组* C&am…

关于PKI 你了解多少

公钥基础设施PKI&#xff08;Public Key Infrastructure&#xff09;&#xff0c;是利用公开密钥机制建立起来的基础设施&#xff0c;在信息互联互通时代&#xff0c;可以说它是创建、颁发、管理、注销公钥证书所涉及的所有软件、硬件集合体。对拥有庞大用户的系统来说&#xf…

Activity的5种启动模式详解(新增singleInstancePerTask类型)

前言 看到这个标题的时候&#xff0c;也许你会认为我写错了&#xff0c;Activity不是只有四种启动模式吗&#xff1f;分别为startard,singleTop,singleTask,singleInstance这四种。 一般来说是四种&#xff0c;但是android12的时候新加入了singleInstancePerTask类型&#xf…

【金三银四系列】之MySql面试突击(2023版)

Mysql金三银四面试突击班 1.Bin log是什么&#xff0c;有什么用&#xff1f;&#xff08;数据库被人干掉了怎么办&#xff1f;&#xff09; 1.bin Log: 数据恢复 主从复制 MySQL Server 层也有一个日志文件&#xff0c;叫做 binlog&#xff0c;它可以被所有的存储引擎使用。…

PRD-产品需求说明文档

产品需求说明文档&#xff08;PRD&#xff09;可以将产品设计思路清晰的展现给团队人员&#xff0c;便于他们快速理解产品。产品需求说明文档如何写呢&#xff1f;本文希望能够得到高人指点&#xff0c;本人是小白&#xff0c;同时不建议其他小白参考此文以免造成干扰。 包括文…

Spark 学习案例

案例1&#xff1a;搜索引擎日志分析 数据来源&#xff1a;使用搜狗实验室提供的【用户查询日志】数据。使用Saprk框架&#xff0c;将数据封装到RDD中进行数据处理分析。 数据网址&#xff1a;数据地址 这个地址可能过期了&#xff0c;需要的伙伴可以私聊博主。 数据格式&…