以前一直使用阿里Druid数据库连接池,这段时间听说有个号称速度最快、代码最简的后起之秀——HikariCP,于是动手实践一下

1.依赖如下:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  4. <modelVersion>4.0.0</modelVersion>
  5. <parent>
  6. <groupId>org.springframework.boot</groupId>
  7. <artifactId>spring-boot-starter-parent</artifactId>
  8. <version>2.2.4.RELEASE</version>
  9. <relativePath/> <!-- lookup parent from repository -->
  10. </parent>
  11. <groupId>com.codekjm</groupId>
  12. <artifactId>hikari-cp</artifactId>
  13. <version>0.0.1-SNAPSHOT</version>
  14. <name>hikari-cp</name>
  15. <description>hikari-cp</description>
  16. <properties>
  17. <java.version>1.8</java.version>
  18. </properties>
  19. <dependencies>
  20. <dependency>
  21. <groupId>org.springframework.boot</groupId>
  22. <artifactId>spring-boot-starter</artifactId>
  23. </dependency>
  24. <!--JPA默认包含号称最快的HikariCP数据库连接池,不用引进依赖-->
  25. <dependency>
  26. <groupId>org.springframework.boot</groupId>
  27. <artifactId>spring-boot-starter-data-jpa</artifactId>
  28. </dependency>
  29. <dependency>
  30. <groupId>org.springframework.boot</groupId>
  31. <artifactId>spring-boot-starter-test</artifactId>
  32. <scope>test</scope>
  33. <exclusions>
  34. <exclusion>
  35. <groupId>org.junit.vintage</groupId>
  36. <artifactId>junit-vintage-engine</artifactId>
  37. </exclusion>
  38. </exclusions>
  39. </dependency>
  40.  
  41. <dependency>
  42. <groupId>mysql</groupId>
  43. <artifactId>mysql-connector-java</artifactId>
  44. <version>8.0.15</version>
  45. <scope>runtime</scope>
  46. </dependency>
  47. <dependency>
  48. <groupId>org.projectlombok</groupId>
  49. <artifactId>lombok</artifactId>
  50. <optional>true</optional>
  51. </dependency>
  52. <!-- 阿里fast-json -->
  53. <dependency>
  54. <groupId>com.alibaba</groupId>
  55. <artifactId>fastjson</artifactId>
  56. <version>1.2.54</version>
  57. </dependency>
  58. </dependencies>
  59.  
  60. <build>
  61. <plugins>
  62. <plugin>
  63. <groupId>org.springframework.boot</groupId>
  64. <artifactId>spring-boot-maven-plugin</artifactId>
  65. </plugin>
  66. </plugins>
  67. </build>
  68. </project>

2.yml配置如下:

  1. # 文件上传配置
  2. spring:
  3. ## 数据库配置
  4. datasource:
  5. type: com.zaxxer.hikari.HikariDataSource
  6. driver-class-name: com.mysql.cj.jdbc.Driver
  7. url: jdbc:mysql://127.0.0.1:3306/hikari-cp?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf8&allowMultiQueries=true
  8. username: root
  9. password: root
  10. ## Hikari 连接池配置 ------ 详细配置请访问:https://github.com/brettwooldridge/HikariCP
  11. hikari:
  12. ## 最小空闲连接数量
  13. minimum-idle: 10
  14. ## 空闲连接存活最大时间,默认600000(10分钟)
  15. idle-timeout: 18000
  16. ## 连接池最大连接数,默认是10
  17. maximum-pool-size: 1000
  18. ## 此属性控制从池返回的连接的默认自动提交行为,默认值:true
  19. auto-commit: true
  20. ## 连接池母子
  21. pool-name: OfficialWebsiteHikariCP
  22. ## 此属性控制池中连接的最长生命周期,值0表示无限生命周期,默认1800000即30分钟
  23. max-lifetime: 1800000
  24. ## 数据库连接超时时间,默认30秒,即30000
  25. connection-timeout: 300000
  26. connection-test-query: SELECT 1
  27. jpa:
  28. show-sql: true
  29. open-in-view: true
  30. jackson:
  31. default-property-inclusion: non_null
  32. logging:
  33. config: classpath:logback.xml

3.启动服务,看日志都是INFO,没有ERROR,好像没报啥错,但是启动失败了

  1. INFO [2020-02-08 21:08:29,641][] org.springframework.boot.StartupInfoLogger:55 - Starting OfficialWebsiteApplication on CodeKjm with PID 517424 (E:\code\TcProject\official-website\target\classes started by Code in E:\code\TcProject\official-website)
  2. INFO [2020-02-08 21:08:29,642][] org.springframework.boot.SpringApplication:655 - The following profiles are active: dev
  3. INFO [2020-02-08 21:08:30,094][] org.springframework.data.repository.config.RepositoryConfigurationDelegate:127 - Bootstrapping Spring Data JPA repositories in DEFAULT mode.
  4. INFO [2020-02-08 21:08:30,116][] org.springframework.data.repository.config.RepositoryConfigurationDelegate:187 - Finished Spring Data repository scanning in 4ms. Found 0 JPA repository interfaces.
  5. INFO [2020-02-08 21:08:30,502][] com.zaxxer.hikari.HikariDataSource:110 - WebsiteHikariCP - Starting...
  6. INFO [2020-02-08 21:08:31,292][] com.zaxxer.hikari.HikariDataSource:123 - WebsiteHikariCP - Start completed.
  7. INFO [2020-02-08 21:08:31,448][] org.hibernate.Version:46 - HHH000412: Hibernate Core {5.4.10.Final}
  8. INFO [2020-02-08 21:08:31,639][] org.hibernate.annotations.common.reflection.java.JavaReflectionManager:49 - HCANN000001: Hibernate Commons Annotations {5.1.0.Final}
  9. INFO [2020-02-08 21:08:31,902][] org.hibernate.dialect.Dialect:172 - HHH000400: Using dialect: org.hibernate.dialect.MySQL57Dialect
  10. INFO [2020-02-08 21:08:32,078][] org.hibernate.engine.transaction.jta.platform.internal.JtaPlatformInitiator:52 - HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform]
  11. INFO [2020-02-08 21:08:32,089][] org.springframework.orm.jpa.AbstractEntityManagerFactoryBean:416 - Initialized JPA EntityManagerFactory for persistence unit 'default'
  12. INFO [2020-02-08 21:08:32,189][] org.springframework.boot.StartupInfoLogger:61 - Started OfficialWebsiteApplication in 3.075 seconds (JVM running for 4.566)
  13. INFO [2020-02-08 21:08:32,194][] org.springframework.orm.jpa.AbstractEntityManagerFactoryBean:598 - Closing JPA EntityManagerFactory for persistence unit 'default'
  14. INFO [2020-02-08 21:08:32,198][] com.zaxxer.hikari.HikariDataSource:350 - WebsiteHikariCP - Shutdown initiated...
  15. Disconnected from the target VM, address: '127.0.0.1:55321', transport: 'socket'
  16. INFO [2020-02-08 21:08:32,202][] com.zaxxer.hikari.HikariDataSource:352 - WebsiteHikariCP - Shutdown completed.

调配置调了半天,换回原来的Druid连接池也是不行,再看看日志,发现倒数第四行:Closing JPA EntityManagerFactory for persistence unit 'default'

  1. 发现问题了,这个问题似曾熟悉,好久之前遇到过,而且不是ERROR报出来的,太不明显了(为自己的粗心找个理由,哈哈),再回去看看依赖,发现少了一个web依赖:
  1. <dependency>
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring-boot-starter-web</artifactId>
  4. </dependency>

4.把这个依赖加上就行,问题解决,成功启动

  1. INFO [2020-02-08 21:13:35,653][] com.zaxxer.hikari.HikariDataSource:110 - WebsiteHikariCP - Starting...
  2. INFO [2020-02-08 21:13:36,124][] com.zaxxer.hikari.HikariDataSource:123 - WebsiteHikariCP - Start completed.
  3. INFO [2020-02-08 21:13:36,626][] org.hibernate.Version:46 - HHH000412: Hibernate Core {5.3.10.Final}
  4. INFO [2020-02-08 21:13:36,628][] org.hibernate.cfg.Environment:213 - HHH000206: hibernate.properties not found
  5. INFO [2020-02-08 21:13:37,612][] org.hibernate.annotations.common.reflection.java.JavaReflectionManager:49 - HCANN000001: Hibernate Commons Annotations {5.0.4.Final}
  6. INFO [2020-02-08 21:13:38,015][] org.hibernate.dialect.Dialect:157 - HHH000400: Using dialect: org.hibernate.dialect.MySQL5Dialect
  7. INFO [2020-02-08 21:13:38,503][] org.springframework.orm.jpa.AbstractEntityManagerFactoryBean:415 - Initialized JPA EntityManagerFactory for persistence unit 'default'
  8. INFO [2020-02-08 21:13:38,963][] org.springframework.scheduling.concurrent.ExecutorConfigurationSupport:171 - Initializing ExecutorService 'applicationTaskExecutor'
  9. INFO [2020-02-08 21:13:39,415][] org.apache.juli.logging.DirectJDKLog:173 - Starting ProtocolHandler ["http-nio-8080"]
  10. INFO [2020-02-08 21:13:39,451][] org.springframework.boot.web.embedded.tomcat.TomcatWebServer:204 - Tomcat started on port(s): 8080 (http) with context path '/Website'
  11. INFO [2020-02-08 21:13:39,457][] org.springframework.boot.StartupInfoLogger:59 - Started OfficialWebsiteApplication in 14.086 seconds (JVM running for 17.532)

5.性能测试

有很多朋友已经亲测过了,这里我分享一个地址,大家进去比对一下各项性能,综合自己业务以及架构需要,采用合适的连接池即可

https://blog.csdn.net/fzghjx/article/details/88777442

SpringBoot性能优化之HikariCP连接池的更多相关文章

  1. springboot 2.0 mariadb hikari-cp连接池

    直到今天 2018年9月29日 10:00:38 ,hikari-cp 在maven 官方仓库最新版本为2.6 SpringBoot 2.0.5 控制台输出,默认的是 2.7.9 spring-boo ...

  2. SpringBoot 使用Hikaricp连接池

    1.添加pom.xml依赖 如果是SpringBoot2.0,那么默认的连接池就是Hikaricp,不需要配置 其他的,如果继承 <parent> <groupId>org.s ...

  3. HikariCP连接池

    1.HikariCP连接池是什么? HikariCP是数据库连接池,而且是号称史上最快的,而且目前来看确实是这样的,SpringBoot2.0也已经采用HikariCP作为默认连接池配置. githu ...

  4. Java代码生成器加入postgresql数据库、HikariCP连接池、swagger2支持!

    目录 前言 PostgreSql VS MySql HikariCP VS Druid Swagger2 自定义参数配置一览 结语 前言   最近几天又抽时间给代码生成器增加了几个新功能(预计今晚发布 ...

  5. 在 Spring Boot 中使用 HikariCP 连接池

    上次帮小王解决了如何在 Spring Boot 中使用 JDBC 连接 MySQL 后,我就一直在等,等他问我第三个问题,比如说如何在 Spring Boot 中使用 HikariCP 连接池.但我等 ...

  6. SpringBoot 整合mongoDB并自定义连接池

    SpringBoot 整合mongoDB并自定义连接池 得力于SpringBoot的特性,整合mongoDB是很容易的,我们整合mongoDB的目的就是想用它给我们提供的mongoTemplate,它 ...

  7. HikariCP连接池及其在springboot中的配置

    主要配置如下: 配置项 描述 构造器默认值 默认配置validate之后的值 validate重置 autoCommit 自动提交从池中返回的连接 true true - connectionTime ...

  8. SpringBoot 2.0 中 HikariCP 数据库连接池原理解析

    作为后台服务开发,在日常工作中我们天天都在跟数据库打交道,一直在进行各种CRUD操作,都会使用到数据库连接池.按照发展历程,业界知名的数据库连接池有以下几种:c3p0.DBCP.Tomcat JDBC ...

  9. Spring系列之HikariCP连接池

    上两篇文章,我们讲到了Spring中如何配置单数据源和多数据源,配置数据源的时候,连接池有很多选择,在SpringBoot 1.0中使用的是Tomcat的DataSource,在SpringBoot ...

随机推荐

  1. $[NOIp2008]$双栈排序 栈/二分图/贪心

    \(Sol\) 先考虑单栈排序,怎么样的序列可以单栈排序呢?设\(a_i\)表示位置\(i\)是哪个数.\(\exist i<j<k\),都没有\(a_k<a_i<a_j\), ...

  2. FlyweightPattern(享元模式)-----Java/.Net

    享元模式(Flyweight Pattern)主要用于减少创建对象的数量,以减少内存占用和提高性能.这种类型的设计模式属于结构型模式,它提供了减少对象数量从而改善应用所需的对象结构的方式

  3. Java容器知识总结

    剖析面试最常见问题之Java集合框架 说说List,Set,Map三者的区别? List(对付顺序的好帮手): List接口存储一组不唯一(可以有多个元素引用相同的对象),有序的对象 Set(注重独一 ...

  4. 「Luogu P2201」数列编辑器 解题报告

    数列编辑器,在线IDE 本期的主题是洛谷的在线IDE 小学生?!小学生虐我

  5. overflow:hidden的使用

    (1)overflow:hidden可以用来隐藏溢出的文本内容 给定内容的大小(宽高)超出后自动隐藏 <body>     <div class="box"> ...

  6. shell点名脚本不重复人名

    效果如图: 代码如下: #!/bin/bash #Author:GaoHongYu #QQ: #Time:-- :: #Name:dm.sh #Version:V1. stu=(刘一 陈二 张三 李四 ...

  7. ArcGIS Enterprise 10.6 (Windows)安装及部署图解

    目录 前言 1 本地环境配置 1.1 机器名修改 1.2 安装和配置IIS 2 ArcGIS for Server 2.1 安装 ArcGIS for Server 2.2 配置 ArcGIS for ...

  8. Numpy常用方法及应用总汇

    目录 Numpy 1.基本操作 1.1数组转换 1.2数组生成 1.3文件读取 1.4查看操作 2.数据类型 2.1指定数据类型: 2.2查看数据类型 2.3数据类型转换 3.数组运算 3.1数组间运 ...

  9. Java 基础(二)| 使用 lambad 表达式的正确姿势

    前言 为跳槽面试做准备,今天开始进入 Java 基础的复习.希望基础不好的同学看完这篇文章,能掌握 lambda 表达式,而基础好的同学权当复习,希望看完这篇文章能够起一点你的青涩记忆. 一.什么是 ...

  10. Spring Boot2 系列教程 (十一) | 整合数据缓存 Cache

    如题,今天介绍 SpringBoot 的数据缓存.做过开发的都知道程序的瓶颈在于数据库,我们也知道内存的速度是大大快于硬盘的,当需要重复获取相同数据时,一次又一次的请求数据库或者远程服务,导致大量时间 ...