数据库链接池示实例

2023-09-14 19:47:09

数据库连接池

为什么使用连接池

使用JDBC和数据库建立连接的方式

  • 建立连接
  • 执行对数据库的操作
  • 关闭连接
  • 回收资源

每次要访问数据库都要 先建立连接 执行操作 然后再 断开连接 回收资源 如果经常对数据库操作 则内存开销大

使用一次 连接一次

使用连接池和数据库建立连接

  • 创建连接池(只需要执行一次)
  • 从连接池获取连接
  • 执行对数据库的操作
  • 将连接放回连接池

Q:放回连接池后的连接还能被再次利用吗

A:可以,只要保证连接池中有空闲的连接就能和数据库建立连接

每次要对数据库进行操作时就从连接池中取出一个连接 操作完成之后放回 方便快捷

**按需要获取连接 从连接池中获取一个连接 用完再放回 **

使用连接池的好处

  • 提高资源的重用性(主要原理)

避免频繁的创建数据库连接,先创建多个联机放入连接池可以重复使用

  • 响应速度更快

不需要再从头建连接,直接从连接池中获取连接,减少了时间开销

  • 新的资源分配

可以直接在应用层管理连接池中的资源,使用JDBC的话则不能管理

  • 统一的资源管理

可以统一的对连接池中的链接进行管理,能设置连接个数还能设置超时断开时间

使用连接池本质上的多个数据库建立连接的重用,重用性得到提高其连接的响应速度会更快,连接的效率更高,也更加方便管理

连接池原理

建立连接池

  • 建立若干和数据库的连接
  • 将建立的联机放入容器中

对连接池的管理(核心)

  • 和线程相配合
  • 可以设置最大等待时间 到时间强制关闭连接 抛出异常
  • 建立连接先需要先判断是否达到了设定的最大值

Q:建立的连接数量能超过所设定的最大值吗?

A:可以超过,有上限并不说明一定不能超过这个数量

比如上限是5个连接当连接需求增多时可以增加到6个(超过了最大连接限制)

Q:为什么可以超过,能超过最多是多少

A:当需要更多的连接时如果不能及时的提供则会造成访问时间长,可以超过但不能无限度的超过比如不能超过上线的30%

连接池的关闭

  • 关闭连接池的时间是 整个程序退出时

连接池的配置

  • 主要的配置是minConn和maxConn用来限制连接池的数量
    • minxConn 是启动时要建立的连接数量
    • maxConn是 最大的建立的连接数量

Q:minConn应该设置多少?设置的过多或过少会怎样

A:设置的多-启动时慢-响应快

设置的少-启动快-但可能因为连接不足造成执行速度缓慢 需要自行寻找饱 和点 权衡驱动时间和响应

自定义数据库连接池

package come.example.jdbc.chapter02;

import java.sql.Connection;

/**
 * @Classname TestMyConnectionPool
 * @Description 测试自定义连接池
 * @Author Jay lan
 * @Date 2023/9/12 20:21
 * @Version 1.0.0
 */
public class TestMyConnectionPool {
    public static void main(String[] args) {
        for (int i = 0; i < 6; i++) {
            try {
//                从连接池获取连接
                Connection connection=MyConnectionPool.getConnection();
//                使用获取到的链接
                System.out.println("获取到的第"+i+"个连接为:"+connection);
//                将连接放回连接池
                MyConnectionPool.releaseConnection(connection);


            }catch (Exception e)
            {
                e.printStackTrace();
            }
        }
    }
}


package come.example.jdbc.chapter02;

import java.sql.Connection;
import java.sql.DriverManager;
import java.util.LinkedList;


/**
 * @Classname MyConnectionPool
 * @Description 自定义的数据库连接池
 * @Author Jay lan
 * @Date 2023/9/11 11:39
 * @Version 1.0.0
 */


public class MyConnectionPool {
    //    创建一个存储Connection兑现的List作为连接池
    private static final LinkedList<Connection> myPool = new LinkedList<Connection>();

    //    建立三个连接并放入连接池
    static {
        try {
            for (int i = 0; i < 3; i++) {
//                注册驱动
                Class.forName("com.mysql.cj.jdbc.Driver");
//                获取JDBC连接
                Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/chapter01","root","Xi233");
//                将连接放入连接池(存放Connection的List)
                myPool.add(connection);
            }

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * @return Connection对象(连接)
     * @Description 从连接池中获取一个连接
     */
    public static Connection getConnection() {
//        removeFirst()从集合中移除第一个元素并将其返回
//        getFirst()则是取出第一个元素不将其从集合中移除
        return myPool.removeFirst();
    }

    /**
     * @param connection 要释放的连接
     * @Description 释放一个连接将放回连接池
     */
    public static void releaseConnection(Connection connection) {
        if (connection != null) {
            myPool.add(connection);
        }

    }

}


常用的连接池

  • CP30-开源
  • DBCP连接池-Apache组织,开源,适合服务器,独立的应用程序
  • Druid连接池-国产,阿里巴巴,开源
更多推荐

JVM基础-Hotspot VM相关知识学习

这里写目录标题jdkJVM虚拟机类类的生命周期类加载的时机类的双亲委派机制类的验证java对象MarkWordKlassPointer实例数据对齐数据字符串常量池垃圾收集器1.Serial收集器(串行收集器)cms垃圾算法G1垃圾收集器与CMS收集器相比,G1收集器的优势:G1收集器的实现原理:JVM参考文章:JVM之

30.链表练习题(1)(王道2023数据结构2.3.7节1-8题)

【前面使用的所有链表的定义在第29节】试题1:设计一个递归算法,删除不带头结点的单链表L中所有值为x的结点。首先来看非递归算法,暴力遍历:intDel(LinkList&L,ElemTypex){//此函数实现删除链表中为x的元素LNode*p,*q;p=L;//p指向头结点q=L->next;//q指向首元结点whi

AI时代带来的图片造假危机,该如何解决

一、前言当今,图片造假问题非常泛滥,已经成为现代社会中一个严峻的问题。随着AI技术不断的发展,人们可以轻松地通过图像编辑和AI智能生成来篡改和伪造图片,使其看起来真实而难以辨别,之前就看到过一对硕士夫妻为了骗保竟篡改结婚证、离婚证等信息:甚至诺贝尔奖获奖者发表的论文中也疑似进行了图像篡改的行为:这给社会带来了许多负面影

Python案例分析|使用Python图像处理库Pillow处理图像文件

本案例通过使用Python图像处理库Pillow,帮助大家进一步了解Python的基本概念:模块、对象、方法和函数的使用使用Python语言解决实际问题时,往往需要使用由第三方开发的开源Python软件库。本案例使用图像处理库Pillow中的模块、对象来处理图像:实现读取图像、获取图像信息、调整图像大小、旋转图像、平滑

CPU密集型和IO密集型任务的权衡:如何找到最佳平衡点

关于作者:CSDN内容合伙人、技术专家,从零开始做日活千万级APP。专注于分享各领域原创系列文章,擅长java后端、移动开发、人工智能等,希望大家多多支持。目录一、导读二、概览三、CPU密集型与IO密集型3.1、CPU密集型3.2、I/O密集型四、如何区分IO密集型、CPU密集型任务五、推荐阅读一、导读我们继续总结学习

【计算机视觉 | 目标检测 | 图像分割】arxiv 计算机视觉关于目标检测和图像分割的学术速递(7 月 17 日论文合集)

文章目录一、检测相关(5篇)1.1TALL:ThumbnailLayoutforDeepfakeVideoDetection1.2CloudDetectioninMultispectralSatelliteImagesUsingSupportVectorMachinesWithQuantumKernels1.3Mult

Docker 容器生命周期:创建、启动、暂停与停止----从创建到停止多角度分析

🌷🍁博主libin9iOak带您GotoNewWorld.✨🍁🦄个人主页——libin9iOak的博客🎐🐳《面试题大全》文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺🌊《IDEA开发秘籍》学会IDEA常用操作,工作效率翻倍~💐🪁🍁希望本文能够给您带来一定的帮助🌸文章粗浅,敬请批评指正!

Chat GPT是什么,初学者怎么使用Chat GPT,需要注意些什么

目录ChatGPT是什么初学者怎么使用ChatGPT使用ChatGPT需要注意什么一些简单的prompt示例ChatGPT是什么ChatGPT是由OpenAI开发的一种大型语言模型,它基于GPT(GenerativePre-trainedTransformer)架构。GPT是一种基于深度学习的预训练模型,通过在大规模文

谈谈VPN是什么、类型、使用场景、工作原理

作者:Insist--个人主页:insist--个人主页作者会持续更新网络知识和python基础知识,期待你的关注前言本文将讲解VPN是什么、以及它的类型、使用场景、工作原理。目录一、VPN是什么?二、VPN的类型1、站点对站点VPN2、客户端对站点VPN三、VPN的使用场景1、公共Wi-Fi网络2、绕过地理限制3、加

Stable Diffusion如何生成高质量的图-prompt写法介绍

文章目录StableDiffusion使用尝试下效果prompt的编写技巧prompt和negativepromptPrompt格式Prompt规则细节优化GuidanceScale总结StableDiffusionStableDiffusion是一个开源的图像生成AI系统,由Anthropic公司开发。它基于Tran

【实战】 七、Hook,路由,与 URL 状态管理(下) —— React17+React Hook+TS4 最佳实践,仿 Jira 企业级项目(十三)

文章目录一、项目起航:项目初始化与配置二、React与Hook应用:实现项目列表三、TS应用:JS神助攻-强类型四、JWT、用户认证与异步请求五、CSS其实很简单-用CSS-in-JS添加样式六、用户体验优化-加载中和错误状态处理七、Hook,路由,与URL状态管理1+2.3~67.完成URL状态管理与JS中的iter

热文推荐