数据库连接池
一. 概述
数据库连接池,顾名思义就是维护一定数量的与数据库的 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,根据需要,引入其中一个包即可。
然而目前没有这方面的开发需要,待有需要再进行研究。
至于其他配置项,目前没有去深入了解,不影响对其 HikariCP 的使用;
引用
版权声明: 本文为 InfoQ 作者【邱学喆】的原创文章。
原文链接:【http://xie.infoq.cn/article/2dfee9e64309a5ee3ee1bb389】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论