HikariPool 的初始化
在上一节,我们说到了pool = fastPathPool = new HikariPool(this);中的new HikariPool(this)。我们来看下代码:
public HikariPool(final HikariConfig config) {
//①
//PoolBase
super(config);
//②
// 构建一个connectionBag用于保存连接, connectionBag是连接池的核心
this.connectionBag = new ConcurrentBag<>(this);
//初始化连接计数器, 用于统计连接池中的连接数量
this.totalConnections = new AtomicInteger();
//根据是否允许挂起连接池, 初始化锁
this.suspendResumeLock = config.isAllowPoolSuspension() ? new SuspendResumeLock() : SuspendResumeLock.FAUX_LOCK;
//③
//连接池统计
if (config.getMetricsTrackerFactory() != null) {
setMetricsTrackerFactory(config.getMetricsTrackerFactory());
} else {
setMetricRegistry(config.getMetricRegistry());
}
setHealthCheckRegistry(config.getHealthCheckRegistry());
//注册 JMX 相关的 bean
registerMBeans(this);
//④
checkFailFast();
//⑤
ThreadFactory threadFactory = config.getThreadFactory();
this.addConnectionExecutor = createThreadPoolExecutor(config.getMaximumPoolSize(), poolName + " connection adder", threadFactory, new ThreadPoolExecutor.DiscardPolicy());
this.closeConnectionExecutor = createThreadPoolExecutor(config.getMaximumPoolSize(), poolName + " connection closer", threadFactory, new ThreadPoolExecutor.CallerRunsPolicy());
if (config.getScheduledExecutorService() == null) {
threadFactory = threadFactory != null ? threadFactory : new DefaultThreadFactory(poolName + " house

本文详细分析了HikariCP的初始化过程,包括初始化父类PoolBase,设置ConcurrentBag作为数据库连接容器,监控初始化,快速失败检查,初始化线程池,启动连接管理任务以及创建连接泄露检测任务。HikariCP通过逐层传递配置进行初始化,并使用CopyOnWriteArrayList保存连接。此外,文章还介绍了JMX监控,快速失败机制用于在启动时检测配置错误,以及线程池的配置和作用。
最低0.47元/天 解锁文章
2795

被折叠的 条评论
为什么被折叠?



