高性能 数据库连接池 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

相关文章

JavaWeb项目创建、部署、连接数据库保姆级教程(tomcat)

《JavaWeb项目创建、部署、连接数据库保姆级教程(tomcat)》:本文主要介绍如何在IntelliJIDEA2020.1中创建和部署一个JavaWeb项目,包括创建项目、配置Tomcat服务... 目录简介:一、创建项目二、tomcat部署1、将tomcat解压在一个自己找得到路径2、在idea中添加

MySQL MHA集群详解(数据库高可用)

《MySQLMHA集群详解(数据库高可用)》MHA(MasterHighAvailability)是开源MySQL高可用管理工具,用于自动故障检测与转移,支持异步或半同步复制的MySQL主从架构,本... 目录mysql 高可用方案:MHA 详解与实战1. MHA 简介2. MHA 的组件组成(1)MHA

MySQL 数据库进阶之SQL 数据操作与子查询操作大全

《MySQL数据库进阶之SQL数据操作与子查询操作大全》本文详细介绍了SQL中的子查询、数据添加(INSERT)、数据修改(UPDATE)和数据删除(DELETE、TRUNCATE、DROP)操作... 目录一、子查询:嵌套在查询中的查询1.1 子查询的基本语法1.2 子查询的实战示例二、数据添加:INSE

通过DBeaver连接GaussDB数据库的实战案例

《通过DBeaver连接GaussDB数据库的实战案例》DBeaver是一个通用的数据库客户端,可以通过配置不同驱动连接各种不同的数据库,:本文主要介绍通过DBeaver连接GaussDB数据库的... 目录​一、前置条件​二、连接步骤​三、常见问题与解决方案​1. 驱动未找到​2. 连接超时​3. 权限不

MySQL数据库读写分离与负载均衡的实现逻辑

《MySQL数据库读写分离与负载均衡的实现逻辑》读写分离与负载均衡是数据库优化的关键策略,读写分离的核心是将数据库的读操作与写操作分离,本文给大家介绍MySQL数据库读写分离与负载均衡的实现方式,感兴... 目录读写分离与负载均衡的核心概念与目的读写分离的必要性与实现逻辑读写分离的实现方式及优缺点读负载均衡

Go语言中如何进行数据库查询操作

《Go语言中如何进行数据库查询操作》在Go语言中,与数据库交互通常通过使用数据库驱动来实现,Go语言支持多种数据库,如MySQL、PostgreSQL、SQLite等,每种数据库都有其对应的官方或第三... 查询函数QueryRow和Query详细对比特性QueryRowQuery返回值数量1个:*sql

Mysql数据库聚簇索引与非聚簇索引举例详解

《Mysql数据库聚簇索引与非聚簇索引举例详解》在MySQL中聚簇索引和非聚簇索引是两种常见的索引结构,它们的主要区别在于数据的存储方式和索引的组织方式,:本文主要介绍Mysql数据库聚簇索引与非... 目录前言一、核心概念与本质区别二、聚簇索引(Clustered Index)1. 实现原理(以 Inno

MySQL数据库双机热备的配置方法详解

《MySQL数据库双机热备的配置方法详解》在企业级应用中,数据库的高可用性和数据的安全性是至关重要的,MySQL作为最流行的开源关系型数据库管理系统之一,提供了多种方式来实现高可用性,其中双机热备(M... 目录1. 环境准备1.1 安装mysql1.2 配置MySQL1.2.1 主服务器配置1.2.2 从

SpringBoot基于注解实现数据库字段回填的完整方案

《SpringBoot基于注解实现数据库字段回填的完整方案》这篇文章主要为大家详细介绍了SpringBoot如何基于注解实现数据库字段回填的相关方法,文中的示例代码讲解详细,感兴趣的小伙伴可以了解... 目录数据库表pom.XMLRelationFieldRelationFieldMapping基础的一些代

C#实现高性能拍照与水印添加功能完整方案

《C#实现高性能拍照与水印添加功能完整方案》在工业检测、质量追溯等应用场景中,经常需要对产品进行拍照并添加相关信息水印,本文将详细介绍如何使用C#实现一个高性能的拍照和水印添加功能,包含完整的代码实现... 目录1. 概述2. 功能架构设计3. 核心代码实现python3.1 主拍照方法3.2 安全HBIT