写点什么

数据库连接池

用户头像
邱学喆
关注
发布于: 4 小时前
数据库连接池

一. 概述

数据库连接池,顾名思义就是维护一定数量的与数据库的 socket 连接。一般来讲会对其提供如下特性

  • 定时的连接心跳检测

  • 连接池数量的维护,最小连接数以及最大连接数等管理

  • JMX 监控

这里的主要是对 HikariCP 开源数据库连接池进行解读;基于上面的特性,该数据库连接池虽提供了心跳检测机制,但默认是不使用;

二. 原理

该数据库连接池默认提供如下功能,如图:

  • 创建连接线程,由一个单线程去负责创建连接;

  • 关闭连接线程,由一个单线程去负责关闭连接;

  • HouseKeeper 是负责维护连接数;调用频率默认是 30s;

  • 检测连接泄露,每个业务线程获取连接时,都会创建检测连接泄露任务;一旦超过指定时间不归还该链接,就会打印堆栈信息到日志;

  • JMX 管理,监控连接池的空闲连接、在用连接等等信息,具体可以看 HikariPoolMXBean;同时可以查看连接池的配置信息,具体可以看 HikariConfigMXBean 接口;

  • 连接管理,主要由 ConcurrentBag 对象管理所有连接;

三. 配置

3.1 DataSource 配置

  • jdbcUrl 数据库的 url

  • driverClassName 驱动类

  • username 用户名

  • password 密码

  • dataSourceProperties 数据源的额外的配置属性,这个采用 properties 结构存放,具体得看对应的数据库对外的连接属性配置信息;

3.2 Connection 配置

  • catalog 为支持 catalog(目录) 概念的数据库设置默认 catalog,如果未指定此属性,则使用 JDBC 驱动程序定义的缺省目录。 默认值:驱动程序默认

  • schema 该属性设置的默认模式为支持模式的概念数据库。如果未指定此属性,则使用 JDBC 驱动程序定义的默认架构。 默认值:驱动程序默认

  • transactionIsolation 设置该连接的事务级别;

  • isReadOnly 该连接是否是只读模式

  • isAutoCommit 该链接是否是自动提交

  • connectionTimeout 这个是获取连接超时并不是设置网络交互超时;默认值为 30s

  • validationTimeout 设置网络超时,该值用来用来校验用途;如执行测试 SQL;默认值为 5s


3.3 Pool 配置

  • minimumIdle 池中维护的最小空闲连接数,默认值 10

  • maximumPoolSize 池中最大连接数,包括闲置和使用中的连接,默认值 10

  • idleTimeout 连接允许在池中闲置的最长时间,默认值 10m;

  • maxLifetime 池中连接最长生命周期,默认值 30m;

  • initializationFailTimeout 如果池无法成功初始化连接,则此属性控制池是否将 fail fast,默认值为 1 是开启初始化时校验连接

  • connectionInitSql 该属性设置一个 SQL 语句,在将每个新连接创建后,将其添加到池中之前执行该语句。默认值为空

  • leakDetectionThreshold 记录消息之前连接可能离开池的时间量,指的是业务线程持有该连接的时间,如果超过了该时间内,则认为存在连接泄露的问题,会将其堆栈打印出来。默认值是 0,默认不检测。其单位是毫秒;

  • connectionTestQuery 每次获取连接时,都有可能会尝试测试该连接是否存活,测试的语句就该属性的 sql.

3.4 JMX 配置

  • poolName 连接池的用户定义名称,主要出现在日志记录和 JMX 管理控制台中以识别池和池配置

这个都是基本是差不多的

  • isRegisterMbeans 是否要将相关的信息注册到 MBean 服务器中,便于监控查看用途;默认值为 false;

  • isAllowPoolSuspension 控制池是否可以通过 JMX 暂停和恢复,默认值为 false.

3.5 统计配置

这里需要配置 metricRegistry,根据需要,引入其中一个包即可。

<dependency>	<groupId>io.micrometer</groupId>	<artifactId>micrometer-core</artifactId>  <version>1.0.0-rc.6</version></dependency><dependency>	<groupId>io.dropwizard.metrics</groupId>  <artifactId>metrics-core</artifactId>  <version>3.2.4</version></dependency>
复制代码

然而目前没有这方面的开发需要,待有需要再进行研究。


至于其他配置项,目前没有去深入了解,不影响对其 HikariCP 的使用;

引用

  1. MySQL 连接为什么挂死了

  2. Hikari 数据库连接池配置详解

发布于: 4 小时前阅读数: 5
用户头像

邱学喆

关注

计算机原理的深度解读,源码分析。 2018.08.26 加入

在IT领域keep Learning。要知其然,也要知其所以然。原理的爱好,源码的阅读。输出我对原理以及源码解读的理解。个人的仓库:https://gitee.com/Michael_Chan

评论

发布
暂无评论
数据库连接池