五、HikariCP 源码分析之初始化分析二

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

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 + " housekeeper", true);
     this.houseKeepingExecutorService = new ScheduledThreadPoolExecutor(1, threadFactory, new ThreadPoolExecutor.DiscardPol
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值