数据库连接池

①没有使用数据库连接池之前

当有多个线程,每个线程都需要连接mysql数据库,执行SQL语句,那么每一个线程都会创建一个Connection连接,当操作完毕之后也会关闭这个连接。这样频繁的连接和关闭也是耗费时间,因此创建连接和关闭连接都是消耗资源的

②数据库连接池概念

数据库连接池负责分配、管理和释放数据库连接Connection,它允许应用程序重复使用一个现有的连接对象Connection,而不是多次创建使用。实际开发中”获取连接“和”释放资源“是非查消耗系统资源的两个过程,为了解决性能问题,通常我们采用连接池技术,来”共享“Connection对象,那么连接对象、销毁释放资源都交给了数据库连接池。

③数据库连接池原理

连接池基本的思想就是在系统初始化的时候,将数据库连接作为对象存储到内存中,当用户需要访问数据库时,并非建立一个新的连接,而是从数据库连接池中取出一个已经创建的连接对象。使用完毕后,用户也并非将连接关闭,而是将连接放回连接池中,以供下一个用户请求访问使用。而连接的建立、断开都是由连接池来管理,同时,我们也可以进行设置连接池的初始连接数、连接的上下限个数,每个连接的最大使用次数、最大空闲时间等,也可以通过自身的管理机制来监视连接池的连接数量、使用情况等。

④常用的数据库连接池

DBCP     ---->     Apache下的项目
C3P0     ----->     Hibernate底层就是使用C3P0连接池
Druid     ----->     阿里巴巴
HikarCP ----->     速度最快的连接池,Spring框架底层

⑤Druid连接池

1、下载Druid依赖

<!-- https://mvnrepository.com/artifact/com.alibaba/druid -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.10</version>
</dependency>
name:配置这个属性的意义在于,如果存在多个数据源,监控的时候可以通过名字来区分开。 如果没有配置,将会生成一个名字,格式是:"DataSource-"+System.identityHashCode(this)
jdbc:连接数据库的url,不同数据库不一样。例如: mysql :jdbc:mysql://10.20.153.104:3306/druid2 oracle :jdbc:oracle:thin:@10.20.149.85:1521:ocnauto
username:连接数据库的用户名
password:连接数据库的密码。如果你不希望密码直接写在配置文件中,可以使用ConfigFilter。详细看这里:https://github.com/alibaba/druid/wiki/%E4%BD%BF%E7%94%A8ConfigFilter
driverClassName:这一项可配可不配,如果不配置druid会根据url自动识别dbType,然后选择相应的driverClassName(建议配置下)
initialSize:初始化连接个数
maxActive:最大连接数
minIdle:最小连接数
maxWait:等待时间1、数据库连接池在初始化的时候会创建initialSize个连接,当有数据库操作时,会从池中取出一个连接;如果当前池中正在使用的连接数等于maxActive,则会等待一段时间,等待其他操作释放资源,如果这个等待时间超过了maxWait,则会报错。如果当前正在使用的连接池没有达到maxActive,则会判断当前是否有空闲连接,如果有则使用空闲连接,如果没有则新建立一个连接在连接使用完毕之后,不是将其连接关闭,而是将其放入到连接池中,等待其他操作复用。2、连接池内部有机制判断,如果当前总的连接数少于minIdle,则会建立新的空闲连接,以保证连接数得到minIdle有些数据库连接的时候有超时限制(mysql中连接8小时之后会断开),或者由于网络中断的原因,连接池的连接会出现失效的情况。

1、最小连接数:是连接池一直保持的数据库连接,所以如果程序对数据库连接使用量不大,将会出现大量的数据库连接资源浪费
2、最大连接数:是连接池中能申请的最大连接数,如果数据库连接请求超过此数,后面的数据库连接请求将被加入到等待队列中,这样也会影响到数据库的操作
3、最小和最大连接数的差距最小连接数与最大连接数相差太大,那么最先的连接请求会获取连接,之后超过最小连接数量的连接请求等价于建立一个新的数据库连接。不过,这些大于最小连接数的数据库连接在使用完不会立马被释放,将会被放到连接池中等待其他重复使用或空闲超时后被释放。

⑦数据库连接池应用

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/jdbc_db?\
characterEncoding=utf-8&useUnicode=true&serverTimezone=Asia/Shanghai
username=root
password=123456
#使用连接池
#初始化连接个数
initialSize=10
#最小连接数
minIdle=10
#最大连接数
maxActive=20
#等待时间 单位为毫秒
maxWait=3000
package com.softeem.util;
import com.alibaba.druid.pool.DruidDataSourceFactory;
import javax.sql.DataSource;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Properties;
/**
* 替换DBConnection
* @author zhengwen
* @create 2022-03-08 11:10
*/
public class DruidPool {//1.创建数据源(连接池)private static DataSource dataSource;//2.通过静态游离块加载static {try {//3.创建一个空属性列表,使用流的方式读取配置文件Properties p = new Properties();InputStream is = DruidPool.class.getClassLoader().getResourceAsStream("druid.properties");p.load(is);//创建一个DataSource对象dataSource = DruidDataSourceFactory.createDataSource(p);} catch (Exception e) {e.printStackTrace();}}public static DataSource getDataSource(){return dataSource;}//获取连接对象public static Connection getConn(){try {return dataSource.getConnection();} catch (SQLException e) {e.printStackTrace();}return null;}public static void main(String[] args) {/*DataSource dataSource = DruidPool.getDataSource();System.out.println("dataSource = " + dataSource);*/Connection conn = getConn();System.out.println("conn = " + conn);}
}

数据库连接池(Druid)相关推荐

  1. mysql druid 多数据源_SpringBoot使用阿里数据库连接池Druid以及多数据源配置

    SpringBoot使用阿里数据库连接池Druid以及多数据源配置 引入依赖 com.alibaba druid 1.0.29 数据源配置 1.数据源 #master数据源 spring.dataso ...

  2. 阿里巴巴主流数据库连接池Druid入门

    目录 一.数据库连接池的必要性 (一).传统数据库连接模式的的步骤 (二).传统数据库连接模式存在的问题 二.数据库连接池技术 (一).数据连接池的思想: (二).数据库连接池的任务: (三).数据库 ...

  3. 跟我学Springboot开发后端管理系统4:数据库连接池Druid和HikariCP

    上一篇文章主要讲解了如何再Matrix-Web中使用Mybatis-Plus,Mybatis-Plus作为Orm框架,连接数据库需要连接数据库的依赖.WEB 系统高并发环境下,频繁的进行数据库连接操作 ...

  4. [转]阿里巴巴数据库连接池 druid配置详解

    一.背景 java程序很大一部分要操作数据库,为了提高性能操作数据库的时候,又不得不使用数据库连接池.数据库连接池有很多选择,c3p.dhcp.proxool等,druid作为一名后起之秀,凭借其出色 ...

  5. Spring Boot 2.x基础教程:使用国产数据库连接池Druid

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 作者 | 翟永超 来源 | http://blog.di ...

  6. kylin调优,项目中错误总结,知识点总结,kylin jdbc driver + 数据库连接池druid + Myba

    首先给大家分享一个巨牛巨牛的人工智能教程,是我无意中发现的.教程不仅零基础,通俗易懂,而且非常风趣幽默,还时不时有内涵段子,像看小说一样,哈哈-我正在学习中,觉得太牛了,所以分享给大家!点这里可以跳转 ...

  7. kylin调优,项目中错误总结,知识点总结,kylin jdbc driver + 数据库连接池druid + Mybatis项目中的整合,shell脚本执行kylin restapi 案例

    关于本篇文章的说明: 本篇文章为笔者辛苦劳作用了一整天总结出来的文档,大家阅读转发的时候请不要吝啬写上笔者:涂作权 和 原文地址. 由于笔者所在环境没有人用过kylin,笔者也是自学官网,阅读书籍 将 ...

  8. 数据库连接池druid 的jar包官网下载-最新版下载

    进入官网Central Repository: com/alibaba/druid 往下滑 找到最新版点击进入 找到该jar包 点击即可下载

  9. 阿里开源数据库连接池Druid一览

    http://www.kailing.pub/article/index/arcid/91.html

最新文章

  1. Machine Learning week 8 quiz: Principal Component Analysis
  2. [实变函数]5.5 Riemann 积分和 Lebesgue 积分
  3. 研究生新生大数据!一大波00后“涌入”同济,最小博士生20岁
  4. 软件开发中 前台、中台、后台英文_最近处处惹人爱的中台到底是什么
  5. 我的世界服务器的交易系统,我的世界村民交易系统详解_我的世界交易系统介绍_牛游戏网...
  6. 解决SVN403问题
  7. oracle 复制表方法,Oracle 数据库之表的复制
  8. halcon 相似度_怎样用深度学习判断两张图片的相似度?
  9. 二叉树的结构特点及性质
  10. php中调用css设置表格,CSS表格设置实例
  11. Android 模拟屏幕点击和物理按键方式
  12. VS发布网站时,报错提示:“未能将文件xxx复制到xxx,未能找到文件xx”三种解决方案!...
  13. 开发者方案 · 久坐提醒 / 喝水提醒小助手·树莓派4B/咕咕机G2/涂鸦 Link SDK
  14. 变分自编码器 (Variational Autoencoders, VAEs)
  15. wordpress phpass java版本
  16. 实验室信息管理系统(LIMS)可解决实验室的哪些问题?
  17. Ubuntu 解压rar
  18. 云计算-存算一体-EDA-技术杂谈
  19. 宋棠慧|视频|新浪博客|百度知道
  20. 【C语言】问答总结 | 神奇的迭代公式两种解法

热门文章

  1. 学生优惠0元免费开始搭建属于自己的个人博客阿里云
  2. windows ce 5.0与6.0的差别(转)
  3. JSON数据格式的基本使用-JSON序列化
  4. Android黄油刀使用小记
  5. 1042: 【入门】求1992个1992的乘积的末两位数是多少
  6. 企业办公文件集中管理
  7. python代码测试
  8. 如何从 Python 字典中删除键
  9. Android SELinux Enforcing 模式下问题及解决
  10. 怎么做好电商直播的运营工作?