• 【JavaWeb】阿里的德鲁伊和c3p0


    前言

    Jdbc六步骤,Jdbc的封装、sql注入与预编译,自定义连接池,本质上一直在做一件事情,封装工具类JdbcUtil,并一步一步将其优化。需要我们自己封装么?其实有现成的框架可以直接用,市面上也有几个常用的开源连接池:c3p0以及阿里巴巴的德鲁伊。
    既然是开源,那么经过多版本的迭代,功能肯定更加地强大,使用起来也更加地方便。

    一、c3p0连接池

    看c3p0官网:
    在这里插入图片描述
    ①下载地址

    点进去可以下载最新版的c3p0。

    ②文档说明

    也就相当于工具说明书,不然别人也不知道怎么使用c3p0,那么具体如何使用?
    在这里插入图片描述
    ①导包

    将说明中的这两个jar包导入开发工具IDEA即可。

    ④创建数据源

    文档中有编写的代码模板,我们只需要复制过来修改其中的参数就可以了,这些参数都很熟悉。

    • mysql驱动路径
    • 数据库url路径
    • 用户名
    • 密码

    前几天学过配置文件,将这几个常用参数放入配置文件里面,这样代码也能更具有可拓展性。
    既然我们都能想到配置文件,那官方文档中自然也会有它的说明,继续看文档:

    在这里插入图片描述
    ⑤配置方法
    其中有四种配置方式,最常见的是使用xml来配置。

    ⑥xml文件的设置

    其中文件名要以“c3p0-config.xml”的命名规则,不然没法运行,并且要放在IDEA的src路径里面。
    至于其配置文件如何编写,一样还是继续套用模板,我们只需要修改其中的属性:

    在这里插入图片描述
    ⑦数据库连接参数
    设置成自己的参数即可。

    ⑧连接池参数
    这个在具体的项目中设置不同的参数,其实理解起来也都是见名知意的:

    • initialPoolSize:初始化连接池大小
    • maxIdleTime:最大空闲时间
    • maxPoolSize:连接池最大容量
    • minPoolSize:连接池最小容量
    • maxStatements:最大语句对象
      最后代码编写完了,做一个测试,同时也再回顾一遍连接数据库的代码:
      在这里插入图片描述
      ①配置c3p0连接池
      如果有xml配置文件,那么配置信息不用再逐个设置了。

    ②从连接池中获取连接
    直接从c3p0连接池中获取连接。

    ③预编译及处理结果
    ④释放资源
    close方法本来的意思是将连接销毁掉,但事实上c3p0中close方法是将连接返回到连接池中而不是销毁。

    二、Druid

    在GitHub中可以找到druid:
    在这里插入图片描述

    中文译名:德鲁伊。这是阿里巴巴开源的一个数据库连接池。
    Druid是目前最好的数据库连接池。在功能、性能、扩展性方面,都超过其他数据库连接池,想想一年一度的双十一,春运的抢火车票也就能理解了。
    在这里插入图片描述
    ①创建德鲁伊对象
    我们可以发现其API还是那些属性设置,当然这是最基础的4个,还有一些比如连接池大小什么的,这些要具体项目再设置。

    ②配置文件druid.properties
    同样的道理,可以将这些属性放到一个配置文件里面,从而提高代码的拓展性。
    c3p0中使用的是xml,德鲁伊中使用properties。
    配置文件完成,那如何使用它呢?
    在这里插入图片描述

    ①工厂设计模式
    DruidDataSourceFactory,德鲁伊数据源工厂,既然是工厂那通过它就可以直接创建数据源,其中参数即为所编写的配置文件,其余步骤也就是连接数据库的常规操作了。
    ②从连接池中获取连接
    ③预编译及处理结果
    ④释放资源
    同样的道理,德鲁伊中也改造了连接的close方法。

    三、工具类的封装优化

    今天学了连接池,那么也可以把连接池封装进JdbcUtil中,比如说我们使用德鲁伊连接池:
    在这里插入图片描述

    ①将德鲁伊封装进JdbcUtil类中
    通过工厂设计模式获取数据源

    ②获取连接封装
    通过德鲁伊数据源获取连接

    ③释放资源
    其中连接的close方法被改造了,并不是释放连接而是将连接放回连接池。
    优化好JdbcUtil类后,再直接用JdbcUtil类获取连接,实际上就是德鲁伊连接池的连接。

  • 相关阅读:
    gRpc入门
    03 【响应式原理 reactive对比ref setup注意点】
    07_c/c++开源库protobuf序列化
    一文讲透消息队列RocketMQ实现消费幂等
    OC SDK framework如何开放接口和隐藏接口、属性,以及隐藏部分接口、属性
    Keras计算机视觉(二)
    了解cuda和显卡等基本概念
    jQuery的介绍和简单实用
    自己动手从零写桌面操作系统GrapeOS系列教程——20.汇编语言读硬盘实战
    redis启动命令
  • 原文地址:https://blog.csdn.net/wang_qiu_hao/article/details/125204486