高性能 数据库连接池 HikariCP | 构造 HikariCP 数据源

2024-03-12 07:20

本文主要是介绍高性能 数据库连接池 HikariCP | 构造 HikariCP 数据源,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

👀 上节回顾:上一节对 HikariCP 数据源进行了简单介绍。
👉 本节目标:了解如何构造 HikariCP 数据库。


既然那么快,那么怎么构造 HikariCP 数据源,然后用起来呢?

多种构造方法

HikariDataSource 有两个构造方法:

  • 默认构造器:使用 setter 方法来配置连接池。 相比于下面的方法,其性能会稍微低一点,因为有 lazy initialization check。
  • 使用指定的 HikariConfig 构造:其会复制 HikariConfig 到 HikariDataSource,所以修改 HikariConfig 不会影响 HikariDataSource。
/**
* Default constructor.  Setters are used to configure the pool.  Using
* this constructor vs. {@link #HikariDataSource(HikariConfig)} will
* result in {@link #getConnection()} performance that is slightly lower
* due to lazy initialization checks.
*
* The first call to {@link #getConnection()} starts the pool.  Once the pool
* is started, the configuration is "sealed" and no further configuration
* changes are possible -- except via {@link HikariConfigMXBean} methods.
*/
public HikariDataSource()
{super();fastPathPool = null;
}/**
* Construct a HikariDataSource with the specified configuration.  The
* {@link HikariConfig} is copied and the pool is started by invoking this
* constructor.
*
* The {@link HikariConfig} can be modified without affecting the HikariDataSource
* and used to initialize another HikariDataSource instance.
*
* @param configuration a HikariConfig instance
*/
public HikariDataSource(HikariConfig configuration)
{configuration.validate();configuration.copyStateTo(this);LOGGER.info("{} - Starting...", configuration.getPoolName());pool = fastPathPool = new HikariPool(this);LOGGER.info("{} - Start completed.", configuration.getPoolName());this.seal();
}

HikariConfig 有三个构造方法:

  • 默认构造器:使用 setter 方法设置配置
  • 使用 Properties 构造:传入 Properties 配置
  • 使用 Properties 文件路径构造:给到 Properties 配置文件路径,然后加载为 Properties
/**
* Default constructor
*/
public HikariConfig()
{dataSourceProperties = new Properties();healthCheckProperties = new Properties();minIdle = -1;maxPoolSize = -1;maxLifetime = MAX_LIFETIME;connectionTimeout = CONNECTION_TIMEOUT;validationTimeout = VALIDATION_TIMEOUT;idleTimeout = IDLE_TIMEOUT;initializationFailTimeout = 1;isAutoCommit = true;keepaliveTime = DEFAULT_KEEPALIVE_TIME;String systemProp = System.getProperty("hikaricp.configurationFile");if (systemProp != null) {loadProperties(systemProp);}
}/**
* Construct a HikariConfig from the specified properties object.
*
* @param properties the name of the property file
*/
public HikariConfig(Properties properties)
{this();PropertyElf.setTargetFromProperties(this, properties);
}/**
* Construct a HikariConfig from the specified property file name.  <code>propertyFileName</code>
* will first be treated as a path in the file-system, and if that fails the
* Class.getResourceAsStream(propertyFileName) will be tried.
*
* @param propertyFileName the name of the property file
*/
public HikariConfig(String propertyFileName)
{this();loadProperties(propertyFileName);
}

最简单的构造案例

最简单的方式,就是直接使用 HikariDataSource 的默认构造器,然后使用 setter 方法设置属性。

HikariDataSource ds = new HikariDataSource();
ds.setJdbcUrl("jdbc:mysql://localhost:3306/simpsons");
ds.setUsername("bart");
ds.setPassword("51mp50n");

是不是很 easy?😊

SpringBoot 如何构造?

SpringBoot 提供了对 HikariCP 连接池的自动化配置。当满足如下条件时,自动配置 HikariCP 数据源:

  • 重点1:有 HikariDataSource 类,且没有定义 DataSource Bean
  • 重点2:spring.datasource.type 未填值,或者值为 com.zaxxer.hikari.HikariDataSource
  • 重点3:根据配置和 Jdbc 连接明细创建 HikariDataSource
/*** Hikari DataSource configuration.*/
@Configuration(proxyBeanMethods = false)
// 重点1:有 HikariDataSource 类,且没有定义 DataSource Bean
@ConditionalOnClass(HikariDataSource.class)
@ConditionalOnMissingBean(DataSource.class)
// 重点2:spring.datasource.type 未填值,或者值为 com.zaxxer.hikari.HikariDataSource 时
@ConditionalOnProperty(name = "spring.datasource.type", havingValue = "com.zaxxer.hikari.HikariDataSource",matchIfMissing = true)
static class Hikari {@Beanstatic HikariJdbcConnectionDetailsBeanPostProcessor jdbcConnectionDetailsHikariBeanPostProcessor(ObjectProvider<JdbcConnectionDetails> connectionDetailsProvider) {return new HikariJdbcConnectionDetailsBeanPostProcessor(connectionDetailsProvider);}// 重点3:根据 spring.datasource.hikari 配置和 Jdbc 连接明细创建 HikariDataSource@Bean@ConfigurationProperties(prefix = "spring.datasource.hikari")HikariDataSource dataSource(DataSourceProperties properties, JdbcConnectionDetails connectionDetails) {HikariDataSource dataSource = createDataSource(connectionDetails, HikariDataSource.class,properties.getClassLoader());if (StringUtils.hasText(properties.getName())) {dataSource.setPoolName(properties.getName());}return dataSource;}}

spring.datasource.hikari相关配置项将直接应用到 HikariDataSource 类上,该类继承关系如下:

HikariDataSource extends HikariConfig implements DataSource, Closeable

在 HikariConfig 类包含可配置的属性:比如 connectionTimeout
在这里插入图片描述
这样,通过配置文件 + 自动化配置即可完成自定义 HikariCP 数据源配置啦!😊

相关文章

1.高性能 数据库连接池 | HikariCP 简介
2.高性能 数据库连接池 HikariCP | 构造 HikariCP 数据源
3.高性能 数据库连接池 HikariCP | HikariCP 配置详解
4.高性能 数据库连接池 HikariCP | 连接池大小配置误区
5.高性能 数据库连接池 HikariCP | MySQL 最佳性能实践

这篇关于高性能 数据库连接池 HikariCP | 构造 HikariCP 数据源的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/800508

相关文章

MySQL数据库中ENUM的用法是什么详解

《MySQL数据库中ENUM的用法是什么详解》ENUM是一个字符串对象,用于指定一组预定义的值,并可在创建表时使用,下面:本文主要介绍MySQL数据库中ENUM的用法是什么的相关资料,文中通过代码... 目录mysql 中 ENUM 的用法一、ENUM 的定义与语法二、ENUM 的特点三、ENUM 的用法1

Java中调用数据库存储过程的示例代码

《Java中调用数据库存储过程的示例代码》本文介绍Java通过JDBC调用数据库存储过程的方法,涵盖参数类型、执行步骤及数据库差异,需注意异常处理与资源管理,以优化性能并实现复杂业务逻辑,感兴趣的朋友... 目录一、存储过程概述二、Java调用存储过程的基本javascript步骤三、Java调用存储过程示

Go语言数据库编程GORM 的基本使用详解

《Go语言数据库编程GORM的基本使用详解》GORM是Go语言流行的ORM框架,封装database/sql,支持自动迁移、关联、事务等,提供CRUD、条件查询、钩子函数、日志等功能,简化数据库操作... 目录一、安装与初始化1. 安装 GORM 及数据库驱动2. 建立数据库连接二、定义模型结构体三、自动迁

嵌入式数据库SQLite 3配置使用讲解

《嵌入式数据库SQLite3配置使用讲解》本文强调嵌入式项目中SQLite3数据库的重要性,因其零配置、轻量级、跨平台及事务处理特性,可保障数据溯源与责任明确,详细讲解安装配置、基础语法及SQLit... 目录0、惨痛教训1、SQLite3环境配置(1)、下载安装SQLite库(2)、解压下载的文件(3)、

MySQL数据库的内嵌函数和联合查询实例代码

《MySQL数据库的内嵌函数和联合查询实例代码》联合查询是一种将多个查询结果组合在一起的方法,通常使用UNION、UNIONALL、INTERSECT和EXCEPT关键字,下面:本文主要介绍MyS... 目录一.数据库的内嵌函数1.1聚合函数COUNT([DISTINCT] expr)SUM([DISTIN

MySQL追踪数据库表更新操作来源的全面指南

《MySQL追踪数据库表更新操作来源的全面指南》本文将以一个具体问题为例,如何监测哪个IP来源对数据库表statistics_test进行了UPDATE操作,文内探讨了多种方法,并提供了详细的代码... 目录引言1. 为什么需要监控数据库更新操作2. 方法1:启用数据库审计日志(1)mysql/mariad

postgresql数据库基本操作及命令详解

《postgresql数据库基本操作及命令详解》本文介绍了PostgreSQL数据库的基础操作,包括连接、创建、查看数据库,表的增删改查、索引管理、备份恢复及退出命令,适用于数据库管理和开发实践,感兴... 目录1. 连接 PostgreSQL 数据库2. 创建数据库3. 查看当前数据库4. 查看所有数据库

从入门到精通MySQL 数据库索引(实战案例)

《从入门到精通MySQL数据库索引(实战案例)》索引是数据库的目录,提升查询速度,主要类型包括BTree、Hash、全文、空间索引,需根据场景选择,建议用于高频查询、关联字段、排序等,避免重复率高或... 目录一、索引是什么?能干嘛?核心作用:二、索引的 4 种主要类型(附通俗例子)1. BTree 索引(

Oracle 数据库数据操作如何精通 INSERT, UPDATE, DELETE

《Oracle数据库数据操作如何精通INSERT,UPDATE,DELETE》在Oracle数据库中,对表内数据进行增加、修改和删除操作是通过数据操作语言来完成的,下面给大家介绍Oracle数... 目录思维导图一、插入数据 (INSERT)1.1 插入单行数据,指定所有列的值语法:1.2 插入单行数据,指

k8s上运行的mysql、mariadb数据库的备份记录(支持x86和arm两种架构)

《k8s上运行的mysql、mariadb数据库的备份记录(支持x86和arm两种架构)》本文记录在K8s上运行的MySQL/MariaDB备份方案,通过工具容器执行mysqldump,结合定时任务实... 目录前言一、获取需要备份的数据库的信息二、备份步骤1.准备工作(X86)1.准备工作(arm)2.手