【MySQL】mysql连接池

1、对象池简介对象池中包含若干提前准备好的若干实例,当需要时从对象池中提取,当不需要时,则重新放入对象池。一方面,使用对象池不需要频繁的产生和销毁实例对象,另一方面,对象池中的实例如果不够程序调用才会继续产生实例,这大大节省了性能。2、数据库连接池简介据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个;释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏。这项技术能明显提高对数据库操作的性能。3、为
摘要由CSDN通过智能技术生成

目录

1、对象池简介

2、数据库连接池简介

3、为什么要使用连接池

数据库连接池技术的优点

4、连接池的工作原理

5、连接池使用流程

6、常见的连接池

c3p0  

1、c3p0常用配置参数介绍

2、代码使用

druid

1、druid常用配置参数介绍

2、代码使用

dbcp

1、DBCP常用配置参数介绍

2、代码使用

7、上面三种连接池的区别


1、对象池简介

对象池中包含若干提前准备好的若干实例,当需要时从对象池中提取,当不需要时,则重新放入对象池。一方面,使用对象池不需要频繁的产生和销毁实例对象,另一方面,对象池中的实例如果不够程序调用才会继续产生实例,这大大节省了性能。

2、数据库连接池简介

据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个;释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏。这项技术能明显提高对数据库操作的性能。

3、为什么要使用连接池

普通的JDBC请求MySQL连接当完成所有SQL请求任务之后,MySQL连接就会关闭。这样一来MySQL的连接就变成了单次使用,每次使用前都需要重新创建,使用之后都需要将连接关闭。如果此时有多个用户使用JDBC的话,就会出现连接频繁的创建和关闭的过程。而连接池的出现就是为了让连接能够重复使用。

数据库连接池技术的优点

(1) 资源重用

由于数据库连接得以重用,避免了频繁创建,释放连接引起的大量性能开销。在减少系统消耗的基础上,另一方面也增加了系统运行环境的平稳性。

(2) 更快的系统反应速度

数据库连接池在初始化过程中,往往已经创建了若干数据库连接置于连接池中备用。此时连接的初始化工作均已完成。对于业务请求处理而言,直接利用现有可用连接,避免了数据库连接初始化和释放过程的时间开销,从而减少了系统的响应时间

(3) 新的资源分配手段

对于多应用共享同一数据库的系统而言,可在应用层通过数据库连接池的配置,实现某一应用最大可用数据库连接数的限制,避免某一应用独占所有的数据库资源

(4) 统一的连接管理,避免数据库连接泄漏

在较为完善的数据库连接池实现中,可根据预先的占用超时设定,强制回收被占用连接,从而避免了常规数据库连接操作中可能出现的资源泄露

4、连接池的工作原理

数据库连接池的基本思想就是为数据库连接建立一个“缓冲池”。当用户第一次获取连接时,会先请求一定数量(初始链接数量)链接池中,并且会记录每个连接的初始(未使用)时间,然后再将链接池中的连接给有需要的用户。当缓冲池中初始连接用完了,链接池会判断所创建的连接数量是否大于最大链接数如果不大于则可以继续创建连接给请求的用户使用(创建的新连接的个数可自己控制,链接池中有相应的增长参数)。如果已经到到最大链接数则当前用户需要等待直到有用户使用完之后关闭连接,这个用户才可以重复使用。当我们开始使用链接池的时候链接池内部就会进行计时(超时时间),每隔空闲链接的存活时间就会对链接池内部的连接进行一次清理。把所有(当前时间 - 链接最后使用的时间 )> 空闲链接的存活时间的连接释放掉。

5、连接池使用流程

(1)导入依赖(这里以c3p0为例)

jdbc依赖

 

c3p0依赖

<dependency>
            <groupId>com.mchange</groupId>
            <artifactId>c3p0</artifactId>
            <version>0.9.5.3</version>
        </dependency>

打日志依赖

<dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.12</version>
        </dependency>

(2)参数配置

resource目录下的配置文件(db.properties)

jdbcDriver=com.mysql.jdbc.Driver
jdbcUrl=jdbc:mysql://127.0.0.1:3306/school?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai
userName=root
password=123456
minPoolSize=5
maxPoolSize=20
initialPoolSize=5
maxIdleTime=240

(3)获取连接池对象

(4)请求数据库连接 

(MyC3p0.java)

public class MyC3p0 {
    //数据源对象
    private ComboPooledDataSource dataSource;
   //加载驱动
    private MyC3p0() {
        dataSource = new ComboPooledDataSource();
        FileInputStream in = null;//节点流
        try {
            Properties pro = new Properties();
            in = new FileInputStream("D:main\\resources\\db.properties");//配置文件位置
            pro.load(in);//特点和处理流一样
            dataSource.setDriverClass(pro.getProperty("jdbcDriver"));
            dataSource.setJdbcUrl(pro.getProperty("jdbcUrl"));
            dataSource.setUser(pro.getProperty("userName"));
            dataSource.setPassword(pro.getProperty("password"));
            dataSource.setMaxIdleTime(Integer.parseInt(pro.getProperty("maxIdleTime")));
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (PropertyVetoException e) {
            e.printStackTrace();
        }
    }

    private static class Holder {
        private static MyC3p0 c3p0 = new MyC3p0();
    }

    public static MyC3p0 getMyC3p0() {
        return MyC3p0.Holder.c3p0;
    }

    p
  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值