首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

十一、HikariCP源码分析之HouseKeeper

我们在《HikariCP源码分析之初始化分析二》中分析 HikariCP 初始化的时候,遇到了houseKeepingExecutorService的初始化,简单分析了它的初始化过程,但是这个任务是非常重要的...(previous, now), poolName); } //原来的实现代码如下文件的633-650 行: https://github.com/brettwooldridge/HikariCP...但是我们的 HikariCP 中的定时任务是依赖系统时间的啊,如果时间被调整了,那么定时任务就错乱了,后果非常严重,会导致该回收的连接回收不了。...有两种情况HikariCP 是可以容忍的:系统时间回退 128 毫秒以内系统时间前进了,具体多长时间不管上面两种情况下,是不会进入 if 条件里的。...如果是 else-if ,那么就是系统时间被调快了,这个只是加速了连接的生命结束,对 HikariCP 没有影响,连接被回收了是会自动创建新的连接,这个没有关系,因此不处理,只是打印一个警告。

1.4K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Java 数据持久化系列之 HikariCP (一)

    本文的主要内容包括: HikariCP 简介,介绍它的特性和现况。 HikariCP 的配置项详解,分析部分配置的影响。 HikariCP 为什么这么快,介绍其优化点。...除了 OPS 外,HikariCP 的稳定性也更好,性能毛刺更少。 [image.png] 除了性能之外,HikariCP 在很多编码细节上也下了很多功夫。...对于数据库连接中断的情况,HikariCP 也处理的更加出色。...首先,Spring Boot 2.0 的默认数据库连接池配置就是 HikariCP,所以你无需引入其他依赖,直接在 yml 文件中进行 HikariCP 的相关配置即可。基础配置如下所示。...HikariCP 使用字节码技术的目的是减少重复代码的编辑工作,生成统一的代码逻辑。但是在这个基础之上,HikariCP 优化并精简了生成的字节码,提高了性能。

    1.2K00

    数据库链接池HikariCP、Druid

    数据库连接池技术选型 常见的数据库连接池: HikariCPHiKariCP 号称是跑的最快的连接池,并且是 SpringBoot 框架的默认连接池。...来自 Druid 的竞品对比: 功能类别 功能 Druid HikariCP DBCP Tomcat-jdbc C3P0 性能 PSCache 是 否 是 是 是 LRU 是 否 是 是 是 SLB...综合来看:HikariCP 是 Spring Boot 首选数据库连接池,对于 Spring Boot 项目来说,无疑适配性最好。...HikariCP HiKariCP 号称是跑的最快的连接池,并且是 SpringBoot 框架的默认连接池。...如果为了获得最佳性能和对峰值需求的响应能力,我们也不妨让他和最大连接数保持一致,使得 HikariCP 成为一个固定大小的数据库连接池。 connection-timeout:连接超时时间。

    1.2K30

    【追光者系列】HikariCP 源码分析之 allowPoolSuspension

    源码解析 本文基于hikariCP 2.7.3的源码进行分析 suspendPool 首先我们观察com.zaxxer.hikari.pool.HikariPool#suspendPool方法,...尝试在池中维护的最小空闲连接数,如果空闲连接低于此值并且池中的总连接数少于maximumPoolSize,HikariCP将尽最大努力快速高效地添加其他连接)。...连接池是基于自主实现的ConcurrentBag完成的数据连接的多线程共享交互,是HikariCP连接管理快速的其中一个关键点。...【追光者系列】HikariCP连接池监控指标实战 【追光者系列】HikariCP默认配置 【追光者系列】Can you Read Aloud The Word Hikari Properly?...https://github.com/brettwooldridge/HikariCP https://github.com/brettwooldridge/HikariCP/issues/1060 https

    1.2K00

    二、HikariCP获取连接流程源码分析二

    欢迎访问我的博客,同步更新: 枫山别院源代码版本2.4.5-SNAPSHOTHikariPool的getConnection()方法在上一篇《HikariCP获取连接流程源码分析一》中,我们分析了HikariDataSource...如果之前大家有读过 HikariCP 的文档,或者使用过HikariCP的挂起功能,那么你肯定已经猜到了,这个是跟挂起整个连接池有关。...作者 brett 提到挂起的使用方法:挂起连接池更改数据库连接池配置,或者更改 DNS 配置(指向新的主服务器)软驱逐连接池中现有的连接恢复连接池HikariCP可以在运行期通过 JMX修改一些配置的(...suspend() { //MAX_PERMITS = 10000 acquisitionSemaphore.acquireUninterruptibly(MAX_PERMITS); }HikariCP...poolEntry其实是对数据库连接的一个包装类,connectionBag才是 HikariCP中实际保存数据库连接的容器,里面是一个CopyOnWriteArrayList。

    73710

    三、HikariCP获取连接流程源码分析三

    欢迎访问我的博客,同步更新: 枫山别院源代码版本2.4.5-SNAPSHOT话接上篇,我们继续分析HikariCP获取连接的过程。...这里涉及到 HikariCP 的一个设计点,HikariCP的连接不是实时从连接池里剔除的,只是给连接上打个标记而已,都是在获取连接的时候检查是否可用,如果不可用的时候才直接从连接池里删除。...如果在 HikariCP的任何地方都可能剔除连接,那么剔除连接的地方会比较多,会很乱,也容易引发 bug。反之,把剔除链接的操作收缩到某几个固定的逻辑中,就比较好管理。...不管我们使用 Spring 还是自己写的代码从 HikariCP 连接池里拿连接,都是拿到一个java.sql.Connection类型的对象没错吧?...既然如此,HikariCP应该直接返回一个java.sql.Connection对吧?没有那么简单。

    1K20

    基于HiKariCP组件,分析连接池原理

    池塘里养:Connection; 一、设计与原理 1、基础案例 HiKariCP作为SpringBoot2框架的默认连接池,号称是跑的最快的连接池,数据库连接池与之前两篇提到的线程池和对象池,从设计的原理上都是基于池化思想...,只是在实现方式上有各自的特点;首先还是看HiKariCP用法的基础案例: import com.zaxxer.hikari.HikariConfig; import com.zaxxer.hikari.HikariDataSource...FastList openStatements; // 池对象 private final HikariPool hikariPool; 这里需要注意FastList类实现List接口,为HiKariCP...bagEntry); } } 注意这里涉及到连接对象的状态从使用中转为NOT_IN_USE空闲;borrow与requite作为连接池中两个核心方法,负责资源创建与回收; 最后本篇文章并没有站在HiKariCP

    81510
    领券