写作时间:2019-08-07
Spring Boot: 2.1 ,JDK: 1.8, IDE: IntelliJ IDEA

说明

Fast, simple, reliable. HikariCP is a “zero-overhead” production ready JDBC connection pool. At roughly 130Kb, the library is very light.

Using a stub-JDBC implementation to isolate and measure the overhead of HikariCP, comparative benchmarks were performed on a commodity PC.

官网详细地说明了HikariCP所做的一些优化:

  1. 字节码精简 :优化代码,直到编译后的字节码最少,这样,CPU缓存可以加载更多的程序代码;
  2. 优化代理和拦截器:减少代码,例如HikariCP的Statement proxy只有100行代码,只有BoneCP的十分之一;
  3. 自定义数组类型(FastStatementList)代替ArrayList:避免每次get()调用都要进行range check,避免调用remove()时的从头到尾的扫描;
  4. 自定义集合类型(ConcurrentBag:提高并发读写的效率;
  5. 其他针对BoneCP缺陷的优化,比如对于耗时超过一个CPU时间片的方法调用的研究(但没说具体怎么优化)。
  6. 调用代码优化: invokevirtual vs invokestatic,从一个单例调用invokevirtual,到静态方法调用invokestatic,少了两个方法get, set, 字节码更少。
    参考文章:https://github.com/brettwooldridge/HikariCP/wiki/Down-the-Rabbit-Hole

工程建立

参照教程【SpringBoot 2.1 | 第十三篇:SpringBoot综合应用多个DataSoure
】, 新建工程和代码实现。

Hikari Datasource 的默认配置

External Library > Maven: org.springframework.boot:spring-boot-autoconfigure

org.springframework.boot.autoconfigure.jdbc.DataSourceConfiguration

@Configuration@ConditionalOnClass({HikariDataSource.class})@ConditionalOnMissingBean({DataSource.class})@ConditionalOnProperty(name = {"spring.datasource.type"},havingValue = "com.zaxxer.hikari.HikariDataSource",matchIfMissing = true)static class Hikari {Hikari() {}@Bean@ConfigurationProperties(prefix = "spring.datasource.hikari")public HikariDataSource dataSource(DataSourceProperties properties) {HikariDataSource dataSource = (HikariDataSource)DataSourceConfiguration.createDataSource(properties, HikariDataSource.class);if (StringUtils.hasText(properties.getName())) {dataSource.setPoolName(properties.getName());}return dataSource;}}

启动应用

查看相关Hikari 的日志: HikariPool

c.z.d.DemomultidatasourceApplication     : foo datasource: jdbc:h2:mem:foo
c.z.d.DemomultidatasourceApplication     : bar datasource: jdbc:h2:mem:bar
o.s.s.concurrent.ThreadPoolTaskExecutor  : Initializing ExecutorService 'applicationTaskExecutor'
o.s.b.a.e.web.EndpointLinksResolver      : Exposing 15 endpoint(s) beneath base path '/actuator'
o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8080 (http) with context path ''
c.z.d.DemomultidatasourceApplication     : Started DemomultidatasourceApplication in 2.872 seconds (JVM running for 5.245)
com.zaxxer.hikari.HikariDataSource       : 'HikariPool-1 - Starting...'
o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring DispatcherServlet 'dispatcherServlet'o.s.web.servlet.DispatcherServlet        : Initializing Servlet 'dispatcherServlet'
o.s.web.servlet.DispatcherServlet        : Completed initialization in 12 ms
com.zaxxer.hikari.HikariDataSource       : 'HikariPool-1 - Start completed.'
com.zaxxer.hikari.HikariDataSource       : 'HikariPool-2 - Starting...'
com.zaxxer.hikari.HikariDataSource       : 'HikariPool-2 - Start completed.'

总结

Sprint boot 2中默认DataSource是HikariCP。
代码下载:

https://github.com/zgpeace/Spring-Boot2.1/tree/master/db/demomultidatasource

参考

http://brettwooldridge.github.io/HikariCP/
https://github.com/brettwooldridge/HikariCP/wiki/Down-the-Rabbit-Hole
https://www.baeldung.com/hikaricp
https://github.com/brettwooldridge/HikariCP
http://blog.didispace.com/Springboot-2-0-HikariCP-default-reason/

易筋SpringBoot 2.1 | 第十四篇:SpringBoot的HikariCP相关推荐

  1. 【二十四】springboot使用EasyExcel和线程池实现多线程导入Excel数据

      springboot篇章整体栏目:  [一]springboot整合swagger(超详细 [二]springboot整合swagger(自定义)(超详细) [三]springboot整合toke ...

  2. Python之路【第十四篇】:AngularJS --暂无内容-待更新

    Python之路[第十四篇]:AngularJS --暂无内容-待更新 转载于:https://www.cnblogs.com/weiman3389/p/6224181.html

  3. CCIE-LAB-第十四篇-PIM Sparst+IGMP

    CCIE-LAB-第十四篇-PIM Sparst+IGMP 实际中,思科只会给你5个小时去做下面的全部配置 这个是CCIE-LAB的拓扑图 问题 翻译 FABD2正准备在其网络中启用PIM稀疏模式的中 ...

  4. CCNP-第十四篇-BGP综合实验

    CCNP-第十四篇-BGP综合实验 大家好呀,学了那么长时间的BGP,又是一个巨大分水岭,那怎么能没综合实验呢? 答案以及个人录制视屏(数字那个视频因为录制软件的问题看不到命令行可以直接看后面的,不喜 ...

  5. CCNA-第十四篇-NAT-下+链路聚合(LACP)+DHCP

    CCNA-第十四篇-NAT-下 这一篇是是针对一下华为设备的nat,然后讲讲链路聚合 下一篇来一个DHCP+一点点的SDN的介绍 **然后讲完SDN就基本上CCNA结束了哦** 华为的链路聚合叫Eth ...

  6. python原创第十四篇~判断,循环实战训练+答案

    2017-12-07 09:23:55 December Thursday the 49 week, the 341 day #原创第十四篇~判断,循环实战训练 题目:一个整数,它加上100后是一个完 ...

  7. python学习[第十四篇] 文件的输入与输出

    python学习[第十四篇] 文件的输入与输出 标准文件类型 一般来说只要程序一执行,就会访问3个文件: 标准输入(键盘) stdin 标准输出(显示器缓冲区) stdout 默认输出到屏幕 标准错误 ...

  8. JUC并发编程第十四篇,StampedLock(邮戳锁)为什么比ReentrantReadWriteLock(读写锁)更快!

    JUC并发编程第十四篇,StampedLock(邮戳锁)为什么比ReentrantReadWriteLock(读写锁)更快! 一.ReentrantReadWriteLock(读写锁) 1.读写锁存在 ...

  9. 第七十四篇:机器学习优化方法及超参数设置综述

    第七十四篇:机器学习优化方法及超参数设置综述 置顶 2019-08-25 23:03:44 廖佳才 阅读数 207更多 分类专栏: 深度学习 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-S ...

  10. MySQL数据库,从入门到精通:第十四篇——MySQL视图详解

    MySQL数据库,从入门到精通:第十四篇--MySQL视图详解 第 14 篇_视图 1. 常见的数据库对象 2. 视图概述 2. 1 为什么使用视图? 2. 2 视图的理解 3. 创建视图 3. 1 ...

最新文章

  1. 首次用Intellij IDEA打开别人的项目,如何配置Tomcat服务器?
  2. 【公测中】阿里云发布国内首个大数据双活容灾服务,满足高要求大数据灾备场景...
  3. 《The Coaching Booster》问与答
  4. vue小项目总结与笔记【五】——一个轮播图插件vue-awesome-swiper
  5. FIR数字滤波器设计——频率抽样法
  6. Win11更新22000.71:优化任务栏、右键菜单视觉风格
  7. 从零开始编写深度学习库(三)ActivationLayer网络层CPU实现
  8. mysql主从、主主复制及高可用性
  9. 佳能打印机g3800如何安装到计算机,佳能Canon PIXMA G3800 驱动
  10. C#语言和数据库基础
  11. 机器学习课程教学案例—简单手写数字识别系统开发
  12. 蒙特卡洛_蒙特卡洛辍学
  13. 系统更换数据库oracle到mysql问题汇总
  14. 瀑布模型原型模型迭代模型螺旋模型的适用场景
  15. Axure9.0---输入文字时文本框提示消失
  16. 微信公众号对接电影网站,回复名称推送电影
  17. airsim手动控制无人机-详细搭建过程
  18. DDSM database、INbreast database、MIAS等乳腺MG数据获取方式
  19. 以计算机为主题的英语作文范例,英语作文范例,一篇万能英语作文范文。
  20. PG学习笔记(1)—— 主从复制:流复制

热门文章

  1. 集成ahci驱动的xp系统_IDE转AHCI模式 for win7+SSD
  2. linux部署rabbit mq,Linux安装rabbitmq遇到的问题
  3. 单纯学python能干啥_如何高效学习Python编程,转行的朋友可以过来看看,单纯的经验分享...
  4. fastjson safemode_Fastjson远程代码执行漏洞安全通告
  5. 元素滚动scroll系列(附实例、图解)
  6. 【转】@JsonAlias和@JsonProperty注解使用详解
  7. 史上最完整的MySQL注入
  8. 闲鱼Flutter混合工程持续集成的最佳实践
  9. OpenStack HA集群1-Galera Cluster for Mysql
  10. 嗯嗯------摘抄