首页 > 数据库 >Spring Boot - Spring Boot 数据库连接池 Hikari 介绍

Spring Boot - Spring Boot 数据库连接池 Hikari 介绍

时间:2023-04-18 09:14:04浏览次数:47  
标签:JDK Spring Boot ds jar Hikari config 连接 连接池

Spring Boot 数据库连接池 Hikari 介绍

介绍

The HikariCP design aesthetic is Minimalism. 
In keeping with the simple is better or less is more design philosophy,
some configuration axis are intentionally left out.

HikariCP 奉行极简主义的设计美学。为了保持“越简单越好”和“少就是多”的设计理念,故意省略了一些配置。

使用

引入依赖

<dependency>
    <groupId>com.zaxxer</groupId>
    <artifactId>HikariCP</artifactId>
    <version>5.0.0</version>
</dependency>

初始化

方法一

HikariConfig config = new HikariConfig();
config.setJdbcUrl("");
config.setUsername("");
config.setPassword("");
config.addDataSourceProperty("cachePrepStmts", "true");
config.addDataSourceProperty("prepStmtCacheSize", "250");
config.addDataSourceProperty("prepStmtCacheSqlLimit", "2048");
​
HikariDataSource ds = new HikariDataSource(config);

方法二

HikariDataSource ds = new HikariDataSource();
ds.setJdbcUrl("");
ds.setUsername("");
ds.setPassword("");
...

方法三

HikariConfig config = new HikariConfig("/xxx/hikari.properties");
HikariDataSource ds = new HikariDataSource(config);
// properties file
dataSourceClassName=org.postgresql.ds.PGSimpleDataSource
dataSource.user=
dataSource.password=
dataSource.databaseName=
dataSource.portNumber=
dataSource.serverName=

方法四

Properties props = new Properties();
props.setProperty("dataSourceClassName", "org.postgresql.ds.PGSimpleDataSource");
props.setProperty("dataSource.user", "");
props.setProperty("dataSource.password", "");
props.setProperty("dataSource.databaseName", "");
​
HikariConfig config = new HikariConfig(props);
HikariDataSource ds = new HikariDataSource(config);

参数解释

spring:
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://localhost/database?useUnicode=true&characterEncoding=utf8
    username: root
    password: root
    hikari:
        minimum-idle: 10
        idle-timeout: 30000
        maximum-pool-size: 20
        max-lifetime: 120000
        connection-timeout: 30000

以 Hikari 开头的配置都是可选配置,有默认值,不做显示配置也可以

autoCommit:默认是 true,自动提交从池中返回的连接。

connectionTimeout:等待来自池的连接的最大毫秒数,默认为 30000 ms = 30 s,允许最小时间是 250 毫秒,如果小于 250 毫秒,则被重置回 30 秒。

idleTimeout:连接允许在池中闲置的最长时间,默认为 600000,即 10 分钟。如果 idleTimeout + 1 秒 > maxLifetime 且 maxLifetime > 0,则会被重置为 0(代表永远不会退出);如果 idleTimeout != 0 且小于 10 秒,则会被重置为 10 秒。只有当 minimumIdle 小于 maximumPoolSize 时,这个参数才生效,当空闲连接数超过 minimumIdle,而且空闲时间超过 idleTimeout,则会被移除。

keepaliveTime:连接存活时间,这个值必须小于 maxLifetime 值。keepalive "只会发生在空闲的连接上。当对一个给定的连接进行 "keepalive"的时间到了,该连接将从池中移除。允许的最小值是 30000 ms(30秒),但最理想的值是在分钟范围内。默认值:0

maxLifetime:池中连接最长生命周期。默认为 1800000,如果不等于 0 且小于 30 秒则会被重置回 30 分钟。

minimumIdle:控制连接池空闲连接的最小数量,当连接池空闲连接少于 minimumIdle,而且总共连接数不大于 maximumPoolSize 时,HikariCP 会尽力补充新的连接。为了性能考虑,不建议设置此值,而是让 HikariCP 把连接池当做固定大小的处理,默认 minimumIdle 与 maximumPoolSize 一样。当 minIdle < 0 或者 minIdle > maxPoolSize,则被重置为 maxPoolSize,该值默认为 10。

maximumPoolSize:池中最大连接数,包括闲置和使用中的连接。默认为 10。如果 maxPoolSize 小于1,则会被重置。当 minIdle <=0 被重置为DEFAULT_POOL_SIZE 则为 10;如果 minIdle > 0 则重置为 minIdle 的值。

poolName:连接池的用户定义名称,主要出现在日志记录和 JMX 管理控制台中以识别池和池配置。默认为 HikariPool-1。

readOnly:从池中获取的连接是否默认处于只读模式。默认为 false。这个属性工作与否取决于数据库的实现。

connectionTestQuery:如果你的驱动程序支持 JDBC4,我们强烈建议不要设置这个属性。这是针对不支持 JDBC4 Connection.isValid() API的 "传统 "驱动程序。这是一个查询,在一个连接从池子里给你之前会被执行,以验证与数据库的连接是否仍然有效。同样,尝试在没有这个属性的情况下运行数据库池,如果你的驱动不符合JDBC4标准,HikariCP 会记录一个错误。默认值:无。

问题

描述

在生产环境中使用 HikariCP 遇到了如下问题:

  • 系统运行一段时间后,应用会报告无法连接数据库库。异常信息:HikariPool-1 - Connection is not available,request timed out after 1954466ms.
  • 每隔一个小时左右,会有如下日志:HikariPool-1 - Thread starvation or clock leap detected (housekeeper delta=54s566ms151µs86ns)
  • 系统经历一次高并发请求之后,服务器CPU保持在 90% 降不下来

解决

在启动服务时,发现连接池启动的时候,总报一个提示:

HikariPool-1 - Driver does not support get/set network timeout for connections. (oracle.jdbc.driver.T4CConnection.getNetworkTimeout()I)

经调查发现,数据版本是Oracle 12.2,但服务的 ojdbc 版本是6,更新为 ojdbc8 之后就解决了这个问题。

附 Oracle、JDK、ojdbc驱动版本的对应关系

Oracle Database Version Release-Specific JDBC JAR File with Supported JDK
21.x ojdbc11.jar with JDK 11, JDK 12, JDK 13, JDK 14 and JDK 15
ojdbc8.jar with JDK 8, JDK 11, JDK 12, JDK 13, JDK 14 and JDK 15
19.x ojdbc10.jar with JDK 10, JDK 11
ojdbc8.jar with JDK 8, JDK 9, JDK 11
18.3 ojdbc8.jar with JDK 8, JDK 9, JDK 10, JDK 11
12.2 or 12cR2 ojdbc8.jar with JDK 8
12.1 or 12cR1 ojdbc7.jar with JDK 7, JDK 8
ojdbc6.jar with JDK 6
11.2 or 11gR2 ojdbc6.jar with JDK 6, JDK 7, JDK 8
ojdbc5.jar with JDK 5

 

 

标签:JDK,Spring,Boot,ds,jar,Hikari,config,连接,连接池
From: https://www.cnblogs.com/helios-fz/p/17326472.html

相关文章

  • Linux系统bootx64是怎么引导grub的
    在Linux系统中,bootx64.efi是一个启动加载程序,用于引导GRUB。GRUB(GrandUnifiedBootloader)是一个开源的多操作系统引导加载程序,用于加载和启动Linux、Windows和其他操作系统。当计算机启动时,UEFI固件会读取硬件设备、分区和文件系统来找到可引导的EFI程序。如果GRUB已经安装在硬......
  • spring security中的AuthenticationManager
    一、AuthenticationManagerAuthenticationManager是springsecurity中的认证管理器用来对登录请求进行处理。举个例子讲,在使用表单登录时处理用户的登录请求的是UsernamePasswordAuthenticationFilter这个过滤器,它内部持有一个AuthenticationManager的对象,处理认证登录请求时......
  • Failed to process import candidates for configuration class [springfox.documenta
     org.springframework.beans.factory.BeanDefinitionStoreException:Failedtoprocessimportcandidatesforconfigurationclass[springfox.documentation.swagger2.configuration.Swagger2DocumentationConfiguration];nestedexceptionisjava.lang.IllegalArgumen......
  • 【Spring MVC + Tomcat】Spring MVC 传统VS现代方式的启动过程对比
    1 前言这节我们来讨论下SpringMVC传统和现在的启动方式的不同,可能大家现在上手就是SpringBoot直接给我们内置Tomcat,我们最多也就是改改配置就完事了,我记得我上学的时候写SSM的时候,还要整理各种Jar包和配置,这节我们就来对比下两种启动方式是如何启动SpringMVC的哈。2  传......
  • Spring 教程—REST 客户端详解
    Spring框架为调用REST端点提供了以下选择:WebClient -非阻塞、响应式客户端和fluentAPI。RestTemplate -带有模板方法API的同步客户端。HTTP接口 -注解式接口,并生成动态代理实现。一、 WebClientWebClient 是一个非阻塞的、响应式的客户端,用于执行HTTP请求。它在5.0中引......
  • EasyBoot教程二:制作PE多重启动盘方法
    1.首先下载个U盘启动盘制作工具(我用的是U深度)http://www.ushendu.com/下载UEFI版即可2.安装软件,安装完后打开3.选择ISO模式4.选择ISO保存路径,点击开始制作,制作完成后,用UltraISO打开USD.ISO5.选择保存,保存引导文件6.保存为USD.bif7.打开EasyBoot安装目录C:\ProgramFiles(x86)\Easy......
  • EasyBoot教程一:制作WIN7原版多重启动盘方法
    EasyBoot教程一:制作WIN7原版多重启动盘方法1.安装EasyBoot、UltraISO软件2.用UltraISO打开下载好的WIN7原版镜像3.选择启动,保存引导文件4.保存为win7x32.bif,以后会用到5.打开EasyBoot的安装目录C:\ProgramFiles(x86)\EasyBoot\disk1\ezboot,将ISO文件里的所有文件(注意:不包括autoru......
  • EasyBoot教程三:制作GHOST多重启动盘方法
    怎么让EasyBoot支持ghost文件?1.先下载常用IMG集合找到GHOSTWIN7.IMG2.解压GHOSTWIN7.IMG,用记事本打开AUTOEXEC.BAT,更改gho文件名我这里用win764.gho这个名3.用WinImage这个软件打开GHOSTWIN7.IMG用修改好的AUTOEXEC.BAT文件,保存好后替换上图中的文件点击另存为保存类型选择:所有文......
  • 不同版本的Spring Framework有哪些主要功能?
    官方地址:https://github.com/spring-projects/spring-framework/wiki/Spring-Framework-Versions SpringFramework版本 JDKJavaEE/JakartaEESpringBoot支持新特性eof6.x6.0.xJDK 17-21JakartaEE9-10Springboot3.x What'sNewinSpring......
  • Java SpringBoot 7z 压缩、解压
    JavaSpringBoot7z压缩、解压cmd7z文件压缩7z压缩测试添加依赖<dependency><groupId>org.apache.commons</groupId><artifactId>commons-compress</artifactId><version>1.12</version></dependency><dependency......