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

相关文章

SpringBoot利用dynamic-datasource-spring-boot-starter解决多数据源问题

《SpringBoot利用dynamic-datasource-spring-boot-starter解决多数据源问题》dynamic-datasource-spring-boot-starter是一... 目录概要整体架构构想操作步骤创建数据源切换数据源后续问题小结概要自己闲暇时间想实现一个多租户平台,

使用Dify访问mysql数据库详细代码示例

《使用Dify访问mysql数据库详细代码示例》:本文主要介绍使用Dify访问mysql数据库的相关资料,并详细讲解了如何在本地搭建数据库访问服务,使用ngrok暴露到公网,并创建知识库、数据库访... 1、在本地搭建数据库访问的服务,并使用ngrok暴露到公网。#sql_tools.pyfrom

Java实现数据库图片上传功能详解

《Java实现数据库图片上传功能详解》这篇文章主要为大家详细介绍了如何使用Java实现数据库图片上传功能,包含从数据库拿图片传递前端渲染,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1、前言2、数据库搭建&nbsChina编程p; 3、后端实现将图片存储进数据库4、后端实现从数据库取出图片给前端5、前端拿到

IDEA连接达梦数据库的详细配置指南

《IDEA连接达梦数据库的详细配置指南》达梦数据库(DMDatabase)作为国产关系型数据库的代表,广泛应用于企业级系统开发,本文将详细介绍如何在IntelliJIDEA中配置并连接达梦数据库,助力... 目录准备工作1. 下载达梦JDBC驱动配置步骤1. 将驱动添加到IDEA2. 创建数据库连接连接参数

Jmeter如何向数据库批量插入数据

《Jmeter如何向数据库批量插入数据》:本文主要介绍Jmeter如何向数据库批量插入数据方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Jmeter向数据库批量插入数据Jmeter向mysql数据库中插入数据的入门操作接下来做一下各个元件的配置总结Jmete

MySql中的数据库连接池详解

《MySql中的数据库连接池详解》:本文主要介绍MySql中的数据库连接池方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录mysql数据库连接池1、概念2、为什么会出现数据库连接池3、原理4、数据库连接池的提供商5、DataSource数据源6、DBCP7、C

StarRocks数据库详解(什么是StarRocks)

《StarRocks数据库详解(什么是StarRocks)》StarRocks是一个高性能的全场景MPP数据库,支持多种数据导入导出方式,包括Spark、Flink、Hadoop等,它采用分布式架构,... 目录StarRocks介绍什么是StarRocks?StarRocks适合什么场景?StarRock

Windows环境下安装达梦数据库的完整步骤

《Windows环境下安装达梦数据库的完整步骤》达梦数据库的安装大致分为Windows和Linux版本,本文将以dm8企业版Windows_64位环境为例,为大家介绍一下达梦数据库的具体安装步骤吧... 目录环境介绍1 下载解压安装包2 根据安装手册安装2.1 选择语言 时区2.2 安装向导2.3 接受协议

SpringBoot使用Jasypt对YML文件配置内容加密的方法(数据库密码加密)

《SpringBoot使用Jasypt对YML文件配置内容加密的方法(数据库密码加密)》本文介绍了如何在SpringBoot项目中使用Jasypt对application.yml文件中的敏感信息(如数... 目录SpringBoot使用Jasypt对YML文件配置内容进行加密(例:数据库密码加密)前言一、J

Python调用Orator ORM进行数据库操作

《Python调用OratorORM进行数据库操作》OratorORM是一个功能丰富且灵活的PythonORM库,旨在简化数据库操作,它支持多种数据库并提供了简洁且直观的API,下面我们就... 目录Orator ORM 主要特点安装使用示例总结Orator ORM 是一个功能丰富且灵活的 python O