12 数据库 01 连接池处理
作者:谎言诞行    发布时间:2024年11月19日

1、简要说明

        在Java程序与数据库交互的过程中,如果我们每次都要重新创建数据库连接,那将耗费大量的时间。因此,我们引入了一个新的概念:数据库连接池。那么什么是数据库连接池呢?

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

        注意:数据库连接池对于数据库的支持是非常丰富的。但是,我的数据库处理工具,暂时仅支持3种数据库:MySQL、SQL Server、Oracle。

2、几种常见的连接池对比

        目前,市面上有多种数据库连接池,我们简单的对比一下:

image.png

        在我的工具包中,使用了HikariCP 数据库连接池。它是一个快速、简单、可靠的 JDBC 连接池,在性能上做了很多优化。在速度上,它是目前最快的数据库连接池。出于对多数据库管理的原因,我对数据库连接池进行了二次封装,这样我们就可以同时创建多个数据库实例的连接池,它们之间相互独立。

3、工具包中的连接池配置

        在我的工具包中,定义了一个二级的资源文件夹 database-config 。只要把数据库连接池的配置文件放入这个文件夹,程序启动时,就会加载这些配置文件。在连接池配置上,1个数据库实例对应1个配置文件。对于每一个配置文件,都会创建一个单独的连接池。就是说,假如我们要连接2个不同的数据库,只需要配置2个配置文件即可。下面我们看下如何编写:

image.png

        注意:配置文件的命名规范是,以db开头的properties后缀文件。

3.1、下面是配置文件范例截图:

3.1.1、MySQL数据库

image.png

3.1.2、Oracle 数据库(配置参数一致,只是值不同,这里不再详细说明)

image.png

3.1.3、SQL Server 数据库(配置参数一致,只是值不同,这里不再详细说明)

image.png

4、工具包中的连接池调用示例

        在我的工具包中,程序调用逻辑基本如下:

image.png

        注意:

        (1)在第1次调用数据库连接池管理类(DatabasePoolManager)获取连接池时,会按照配置文件,创建若干个连接池对象。

        (2)在工具包中,没有看到显式调用连接归还。因为工具函数都做了封装处理,一般不需要自己额外写。

4.1、连接池管理类调用示例(管理器使用了单例模式,只在第一次调用时才创建)

image.png

image.png

        通过上图,我们可以看出3个配置文件都识别成功,生成了3个数据库连接池对象。在调用销毁方法后,每一个连接池都注销成功。要注意的是,只有确定不再使用连接池后,才能销毁。比如:软件程序关闭,完全退出时。

        有些朋友可能会问,那么我不注销连接池,直接重启或者推出程序,会怎样?其实答案很简单。当软件已经退出,但是数据库连接没有断开。在数据库中,短时间内还是会保留这连接的进程。如果程序关闭前,有50个连接。那么即使程序关闭了,数据库还是有50个进程在内存。当然,数据库内部还是有进程负责清理这些没用的等待进程。但是,它不会立即回收。要等一段时间。所以,建议在退出程序前,自己手动关闭连接池

        接下来,我们看看,具体的数据库sql语句调用测试。有部分代码是属于后面章节介绍的内容大家看懂大概意思即可

4.2、MySQL 数据库连接,调用示例

image.png

        注意:DBOperator 的构造函数,第 2 个参数如果是 MYSQL ,可以免写这个参数。

image.png

4.3、Oracle 数据库连接,调用示例

image.png

image.png

4.4、SQL Server 数据库连接,调用示例

image.png

image.png


        本章节完结。

填写一种颜色的字符(不区分大小写),1分钟有效,点击图片刷新
谎言诞行
2024-11-19 17:02:17
第 4 章节 的 程序截图,有几个写错了,已经重新截图修改。