hikariCP 数据库连接池配置

springBoot 项目默认自动使用 HikariCP ,HikariCP 的性能比 alibaba/druid快。

一、背景

系统中多少个线程在进行与数据库有关的工作?其中,而多少个线程正在执行 SQL 语句?这可以让我们评估数据库是不是系统瓶颈。

  • 多少个线程在等待获取数据库连接?获取数据库连接需要的平均时长是多少?数据库连接池是否已经不能满足业务模块需求?如果存在获取数据库连接较慢,如大于 100ms,则可能说明配置的数据库连接数不足,或存在连接泄漏问题。

  • 哪些线程正在执行 SQL 语句?执行了的 SQL 语句是什么?数据库中是否存在系统瓶颈或已经产生锁?如果个别 SQL 语句执行速度明显比其它语句慢,则可能是数据库查询逻辑问题,或者已经存在了锁表的情况,这些都应当在系统优化时解决。

  • 最经常被执行的 SQL 语句是在哪段源代码中被调用的?最耗时的 SQL 语句是在哪段源代码中被调用的?在浩如烟海的源代码中找到某条 SQL 并不是一件很容易的事。而当存在问题的 SQL 是在底层代码中,我们就很难知道是哪段代码调用了这个 SQL,并产生了这些系统问题。

在研究HikariCP的过程中,这些业务关注点我发现在连接池这层逐渐找到了答案。

JBDC背景

JABC是JAVA访问关系型数据库的标注API,它为各种关系型数据的访问提供统一的接口标准,然后,各个关系型数据库厂商按照JBDC的标准,提供能使JAVA访问的驱动包。一般情况下,在JAVA中执行一条SQL语句,需要以下几个步骤:

状态JDBC驱动程序

  • 建立数据库连接

  • 创建数据库操作对象

  • 访问数据库,执行SQL语句

  • 处理返回结果集

  • 断开数据库连接
    其中第2步的连接需经历一下步骤:

  • 与数据建立TCP连接的三次握手

  • 数据库账号密码认证的通信

  • sql执行与返回的通信
    = 关闭TCP连接的4次握手
    由此看出,执行一个sql的开销是比较大的,因此,为了节省资源提高效率,使用数据库连接池是很有必要的

二、配置

pom 引入

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-actuator</artifactId>
</dependency>
<dependency><groupId>io.dropwizard.metrics</groupId><artifactId>metrics-core</artifactId>
</dependency>

增加监控配置类

import com.codahale.metrics.MetricRegistry;
import com.codahale.metrics.Slf4jReporter;
import com.zaxxer.hikari.HikariDataSource;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.autoconfigure.jdbc.DataSourceProperties;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.util.StringUtils;import java.util.concurrent.TimeUnit;@Configuration
public class DatasourceConfiguration {private final static Logger LOGGER = LoggerFactory.getLogger(DatasourceConfiguration.class);@Bean@ConfigurationProperties(prefix = "spring.datasource.hikari")HikariDataSource dataSource(DataSourceProperties properties) {HikariDataSource dataSource = properties.initializeDataSourceBuilder().type(HikariDataSource.class).build();if (StringUtils.hasText(properties.getName())) {dataSource.setPoolName(properties.getName());}dataSource.setMetricRegistry(initMetricRegistry(dataSource.getPoolName()));return dataSource;}/*** 配置指标监控* @param poolName* @return*/public MetricRegistry initMetricRegistry(String poolName) {MetricRegistry metricRegistry = new MetricRegistry();Slf4jReporter reporter = Slf4jReporter.forRegistry(metricRegistry).outputTo(LOGGER).convertRatesTo(TimeUnit.SECONDS).convertDurationsTo(TimeUnit.MILLISECONDS).build();reporter.start(30, TimeUnit.SECONDS);//30秒打印一次return metricRegistry;}

项目启动后控制台会打印监控日志

17:22:56.072 [metrics-logger-reporter-1-thread-1] [traceId= spanId=] INFO  avicit.pdm.config.DataSourceConfig - type=GAUGE, name=pdmHikariCP.pool.ActiveConnections, value=0
17:22:56.072 [metrics-logger-reporter-1-thread-1] [traceId= spanId=] INFO  avicit.pdm.config.DataSourceConfig - type=GAUGE, name=pdmHikariCP.pool.IdleConnections, value=5
17:22:56.072 [metrics-logger-reporter-1-thread-1] [traceId= spanId=] INFO  avicit.pdm.config.DataSourceConfig - type=GAUGE, name=pdmHikariCP.pool.MaxConnections, value=40
17:22:56.072 [metrics-logger-reporter-1-thread-1] [traceId= spanId=] INFO  avicit.pdm.config.DataSourceConfig - type=GAUGE, name=pdmHikariCP.pool.MinConnections, value=5
17:22:56.072 [metrics-logger-reporter-1-thread-1] [traceId= spanId=] INFO  avicit.pdm.config.DataSourceConfig - type=GAUGE, name=pdmHikariCP.pool.PendingConnections, value=0
17:22:56.072 [metrics-logger-reporter-1-thread-1] [traceId= spanId=] INFO  avicit.pdm.config.DataSourceConfig - type=GAUGE, name=pdmHikariCP.pool.TotalConnections, value=5
17:22:56.072 [metrics-logger-reporter-1-thread-1] [traceId= spanId=] INFO  avicit.pdm.config.DataSourceConfig - type=HISTOGRAM, name=pdmHikariCP.pool.ConnectionCreation, count=84, min=752, max=10874, mean=825.1112278127991, stddev=106.00103981809646, median=793.0, p75=817.0, p95=1248.0, p98=1248.0, p99=1248.0, p999=1248.0
17:22:56.072 [metrics-logger-reporter-1-thread-1] [traceId= spanId=] INFO  avicit.pdm.config.DataSourceConfig - type=HISTOGRAM, name=pdmHikariCP.pool.Usage, count=7, min=0, max=948, mean=148.27471786535676, stddev=322.1937983856062, median=3.0, p75=103.0, p95=948.0, p98=948.0, p99=948.0, p999=948.0
17:22:56.072 [metrics-logger-reporter-1-thread-1] [traceId= spanId=] INFO  avicit.pdm.config.DataSourceConfig - type=METER, name=pdmHikariCP.pool.ConnectionTimeoutRate, count=0, mean_rate=0.0, m1=0.0, m5=0.0, m15=0.0, rate_unit=events/second
17:22:56.072 [metrics-logger-reporter-1-thread-1] [traceId= spanId=] INFO  avicit.pdm.config.DataSourceConfig - type=TIMER, name=pdmHikariCP.pool.Wait, count=7, min=0.0128, max=78.9716, mean=55.49616178913166, stddev=34.76115035148255, median=76.7992, p75=77.636, p95=78.9716, p98=78.9716, p99=78.9716, p999=78.9716, mean_rate=0.006881493151999419, m1=3.2892511143081085E-8, m5=0.02117048948569106, m15=0.19678830181225304, rate_unit=events/second, duration_unit=milliseconds

springboot hikariCP 配置文件配置

spring:datasource:name: database-adriver-class-name: com.mysql.cj.jdbc.Driver # MySQL 驱动,这里根据引入的 mysql-connector-java 包版本选择不同的 Driver, 8.x 需要用 cjurl: jdbc:mysql://mysql:3306/database-a?useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8&allowMultiQueries=trueusername: rootpassword: 1type: com.zaxxer.hikari.HikariDataSource # JDBC 连接池类型:HikariCPhikari:connection-timeout: 30000     # 等待连接池分配链接的最大时长(毫秒),超过这个时长还没有可用的连接则发生 SQLException,默认:30 秒minimum-idle: 5               # 最小连接数maximum-pool-size: 20         # 最大连接数auto-commit: true             # 自动提交idle-timeout: 600000          # 连接超时的最大时长(毫秒),超时则被释放(retired),默认:10 分钟pool-name: DataSourceHikariCP # 连接池名称max-lifetime: 1800000         # 连接的生命时长(毫秒),超时而且没被使用则被释放(retired),默认: 30 分钟connection-test-query: select 1```

hikariCP 配置参数

下面给出详细的配置信息:

使用率较高

  • autoCommit:用于控制从池中返回连接的默认自动提交行为,默认为true
    connectionTimeout:客户端等待池中连接的最大事件(毫秒),超时则会抛出 -SQLException,最低可接受时间为 250ms,默认值为30000ms
  • idleTimeout:池中连接保持空闲状态的最长时间,只有在定义的minimumIdle 小于- – maximumPoolSize时生效,允许的最小时间为 10000ms。默认为 600000ms
  • keepaliveTime:用于控制 HikariCP 中空闲线程的最大存活时间,该值必须小于- - - - maxLifetime,最小为 30000ms。默认为 0 (disabled)
  • maxLifetime:控制连接池中连接的最长时间,正在使用的连接不会被删除,只有当其关闭连接后才会被删除,当设置为 0 时表示永不删除,最小允许值为 30000ms。 默认值为 1800000ms
  • connectionTestQuery:当使用的驱动为 JDBC4 时不建议设置该项。
  • minimumIdle:控制 HikariCP 中维护的最小空闲连接数。当空闲连接数小于 - - - – - minimumIdle 并且池中的总连接数少于 maximumPoolSize 时,HikariCP 将添加其他连接直到 maximumPoolSize。为了获得最佳性能和对峰值需求的响应能力建议不要设置此值。 默认值与 maximumPoolSize 相同
  • maximumPoolSize:连接池中的最大连接数。默认为 10
  • metricRegistry:该项仅在编程式配置或IoC容器中使用,允许指定一个 Codahale/Dropwizard MetricRegistry 的实例来记录池中的各项指标
  • healthCheckRegistry:同上,用于报告当前连接池的健康状况
    poolName:定义连接池的名称,可以在日志或控制台识别连接池

不常使用

  • initializationFailTimeout:允许初始化失败的次数。默认值为 1
  • isolateInternalQueries:控制 HikariCP 是否在其自己的事务中隔离内部池查询,仅在禁用 autoCommit 时适用。默认值为 false
  • allowPoolSuspension:控制连接池是否可以通过JMX暂停和恢复,当连接池暂停时,对 getConnection() 的调用永不超时,直到连接池恢复。默认为 false
  • readOnly:控制从池中获取的连接是否默认为只读。默认为 false
  • registerMbeans:控制是否注册JMX Management Bean (MBean)。默认值为 false
  • catalog:为支持目录概念的数据库设置默认目录。如果未指定此属性,则使用 JDBC 驱动程序定义的默认目录。默认值为 driver default
  • connectionInitSql:设置一个 SQL 语句,该语句将在每次创建新连接后执行,然后再将其添加到池中。如果此 SQL 无效或引发异常,它将被视为连接失败,并且将遵循标准的重试逻辑。
  • driverClassName:HikariCP 将尝试通过基于 jdbcUrl 的 DriverManager 解析驱动程序,但对于一些较旧的驱动程序,必须指定 driverClassName
  • transactionIsolation:控制从池中返回连接的默认事务隔离级别。如果未指定此属性,则使用 JDBC 驱动定义的默认事务隔离级别。默认值为 driver default
  • validationTimeout:控制用于测试连接的最长存活时间,该值必须小于 - - - connectionTimeout,最短时间为 250ms。默认值为 5000ms
  • leakDetectionThreshold:控制在log日志记录可能发生连接泄漏的消息之前,连接可以离开池的时间。值为 0 表示禁用泄漏检测。启用泄漏检测的最低时间为 2000ms。 默认值为 0
  • dataSource:仅可通过编程式配置或IoC容器使用。通过此属性可以直接设置 DataSource 要由池包装的的实例,而不必让 HikariCP 通过反射进行构造
  • schema:为支持 schema 概念的数据库设置默认的 schema,如果未指定此属性,则使用 JDBC 驱动定义的默认模式。
  • threadFactory:仅可通过编程式配置或IoC容器使用。此属性允许通过 java.util.concurrent.ThreadFactory 创建池使用的所有线程
  • scheduledExecutor:仅可通过编程式配置或IoC容器使用。此属性允许通过 java.util.concurrent.ScheduledExecutorService 设置实将用于各种内部任务的调度。

三、HikariCP監控指标介绍和应用

输出指标说明

打印指标的格式为{连接池名称}.pool.{指标}

指标解释在运维时的作用
ActiveConnections活跃连接数此数据长期保持最大连接数值的时候可以尝试扩大连接数
IdleConnections空闲连接数此数据过高的时候可以尝试减少配置中的最小连接数
MaxConnections配置的最大连接数
MinConnections配置的最小连接数
PendingConnections排队等待连接的线程数如果此数据持续飙高,表示连接池中已经没有空闲线程了
TotalConnections当前总连接数
ConnectionCreation创建新连接的耗时此数据主要反应当前服务到数据服务的网络延迟
ConnectionTimeoutRate创建新连接的超时如果经常创建连接超时这个时候需要排查数据服务或者网络通讯是否异常
Usage连接被复用时长此参数表示连接池中一个连接从返回连接池到再次被复用的时间间隔,表示数据访问频繁程度,对于使用较长的间隔可以尝试减少连接数
Wait获取连接的等待耗时可以和PendingConnections结合分析连接池情况。

Wait和PendingConnections结合分析连接池情况

  • 如果排队多等待短:此时表示数据访问频繁可以尝试扩大连接数;

  • 如果排队少等待长:此时连接中存在慢查询或者比较大的事务;

  • 如果排队多等待长:此时可能是数据访问压力过大且存在大量慢查询,但实际上如果频繁出现慢查询很有可能是程序或者业务上出现了问题,需要对业务和代码进行排查。这种时刻也能网络出现异常导致所有查询都变得非常慢;

输出度量说明

属性 解释

count指标记录次数
min最小记录数
min最大记录数
mean平均值
stddev标准差
median中位数
p7575百分位数
p9595百分位数
p9898百分位数
p9999百分位数
p99999.9百分位数
mean_rate平均耗时
m11分钟内记录平均数
m55分钟记录平均数
m1515分钟记录平均数
duration_unit统计单位
rate_unit记录单位(events/second 为 事件次数/每秒钟)

四、 手动方式获取连接池指标信息

有时候因为业务需要我们可以从DataSource中直接获取指标数据进行处理

	@AutowiredDataSource dataSource;@Value("${datasource.name:test}")String poolName;@RequestMapping("/getInfo")public String getInfo() throws SQLException {String indexName = poolName + ".pool.";MetricRegistry metricRegistry = (MetricRegistry) ((HikariDataSource) dataSource).getMetricRegistry();SortedMap<String, Gauge> gauges = metricRegistry.getGauges();Gauge activeConnections = gauges.get(indexName + "ActiveConnections");Object activeConnectionsV = activeConnections.getValue();log.info("activeConnections : " + activeConnectionsV);Gauge IdleConnections = gauges.get(indexName + "IdleConnections");Object IdleConnectionsV = IdleConnections.getValue();log.info("IdleConnections : " + IdleConnectionsV);Gauge MaxConnections = gauges.get(indexName + "MaxConnections");Object MaxConnectionsV = MaxConnections.getValue();log.info("MaxConnections : " + MaxConnectionsV);Gauge MinConnections = gauges.get(indexName + "MinConnections");Object MinConnectionsV = MinConnections.getValue();log.info("MinConnections : " + MinConnectionsV);Gauge PendingConnections = gauges.get(indexName + "PendingConnections");Object PendingConnectionsV = PendingConnections.getValue();log.info("PendingConnections : " + PendingConnectionsV);Gauge TotalConnections = gauges.get(indexName + "TotalConnections");Object TotalConnectionsV = TotalConnections.getValue();log.info("TotalConnections : " + TotalConnectionsV);SortedMap<String, Histogram> histograms = ((MetricRegistry) metricRegistry).getHistograms();Histogram ConnectionCreation = histograms.get(indexName + "ConnectionCreation");Object ConnectionCreationV = ConnectionCreation.getCount();Snapshot snapshot = ConnectionCreation.getSnapshot();log.info("ConnectionCreation : " + ConnectionCreationV);Histogram Usage = histograms.get(indexName + "Usage");Object UsageV = Usage.getCount();log.info("Usage : " + UsageV);SortedMap<String, Meter> meters = ((MetricRegistry) metricRegistry).getMeters();Meter meter = meters.get(indexName + "ConnectionTimeoutRate");long count = meter.getCount();log.info("ConnectionTimeoutRate : " + count);SortedMap<String, Timer> timers = ((MetricRegistry) metricRegistry).getTimers();Timer timer = timers.get(indexName + "Wait");long count1 = timer.getCount();log.info("Wait : " + count1);return "";}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/167807.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于法医调查算法优化概率神经网络PNN的分类预测 - 附代码

基于法医调查算法优化概率神经网络PNN的分类预测 - 附代码 文章目录 基于法医调查算法优化概率神经网络PNN的分类预测 - 附代码1.PNN网络概述2.变压器故障诊街系统相关背景2.1 模型建立 3.基于法医调查优化的PNN网络5.测试结果6.参考文献7.Matlab代码 摘要&#xff1a;针对PNN神…

【学生成绩管理】数据库示例数据(MySQL代码)

【学生成绩管理】数据库示例数据&#xff08;MySQL代码&#xff09; 目录 【学生成绩管理】数据库示例数据&#xff08;MySQL代码&#xff09;一、创建数据库二、创建dept&#xff08;学院&#xff09;表1、创建表结构2、添加示例数据3、查看表中数据 三、创建stu&#xff08;学…

35.逻辑运算符

目录 一.什么是逻辑运算符 二.C语言中的逻辑运算符 三.逻辑表达式 三.视频教程 一.什么是逻辑运算符 同时对俩个或者俩个以上的表达式进行判断的运算符叫做逻辑运算符。 举例&#xff1a;比如去网吧上网&#xff0c;只有年满十八周岁并且带身份证才可以上网。在C语言中如果…

为什么 Flink 抛弃了 Scala

曾经红遍一时的Scala 想当初Spark横空出世之后&#xff0c;Scala简直就是语言界的一颗璀璨新星&#xff0c;惹得大家纷纷侧目&#xff0c;连Kafka这类技术框架也选择用Scala语言进行开发重构。 可如今&#xff0c;Flink竟然公开宣布弃用Scala 在Flink1.18的官方文档里&#x…

国家开放大学的学子们 练习题 走起!

试卷代号&#xff1a;1356 高级英语听说(2) 参考 试题 Section One (20 points, 2 points each) Directions: Listen to the conversation and fill in the blanks with the words you hear. Write the words on the Answer Sheet The conversation will be read TWICE. M…

windows11上安装WSL

Windows电脑上要配置linux&#xff08;这里指ubuntu&#xff09;开发环境&#xff0c;主要有三种方式&#xff1a; 1&#xff09;在windows上装个虚拟机&#xff08;比如vmware&#xff09;。缺点是vmware加载ubuntu后系统会变慢很多&#xff0c;而且需要通过samba来实现window…

使用Java连接Hbase

我在网上试 了很多代码&#xff0c;但是大部分都不能实现&#xff0c;Java连接Hbase&#xff0c;一直报一个错 java.util.concurrent.ExecutionException: org.apache.zookeeper.KeeperException$NoNodeException: KeeperErrorCode NoNode for /hbase/hbaseid一直也不清楚为什…

计算机组成原理。3-408

1.动态存储和静态存储 2.双端口RAM 注意&#xff1a;cpu通过地址线和数据线读写数据时&#xff0c;不能同时写&#xff0c;但可以同时读&#xff0c;也不能一边读一边写。 3.多体并行存储器 分为高位存储和低位存储 小结 4.磁盘存储器的组成 5.磁盘的性能指标 磁盘读写寻道…

如何对网站进行渗透测试

信息搜集 信息搜集拿到域名后获取真实IP&#xff0c;如果存在CDN想办法绕过端口扫描&#xff0c;针对开放的端口在获取客户同意的前提下进行爆破查找网站子域名&#xff0c;后台目录判断网站的CMS 可以使用 Wappalyzer插件 whatcms 是一个可以用来确定特定网站正在使用的什么…

Vue中Slot的使用指南

目录 前言 什么是slot&#xff1f; 单个slot的使用 具名slot的使用 作用域插槽 总结 前言 在Vue中&#xff0c;slot是一种非常强大和灵活的功能&#xff0c;它允许你在组件模板中预留出一个或多个"插槽"&#xff0c;然后在使用这个组件的时候动态地填充内容。这…

TSINGSEE青犀智能分析网关道路积水识别AI算法方案

在各处的街道、路口等区域&#xff0c;及时发现道路积水问题&#xff0c;可以大大减少城市管理部门压力&#xff0c;及时处理&#xff0c;减少交通事故与人员摔倒事故。通过道路积水AI算法&#xff0c;能有效提高城市管理部门效率&#xff0c;优化城市管理方式。 那么&#xff…

【Web】PhpBypassTrick相关例题wp

目录 ①[NSSCTF 2022 Spring Recruit]babyphp ②[鹤城杯 2021]Middle magic ③[WUSTCTF 2020]朴实无华 ④[SWPUCTF 2022 新生赛]funny_php 明天中期考&#xff0c;先整理些小知识点冷静一下 ①[NSSCTF 2022 Spring Recruit]babyphp payload: a[]1&b1[]1&b2[]2&…

NLP的使用

参考&#xff1a; Apache openNLP 简介 - 链滴 (ld246.com) opennlp 模型下载地址&#xff1a;Index of /apache/opennlp/models/ud-models-1.0/ (tencent.com) OpenNLP是一个流行的开源自然语言处理工具包&#xff0c;它提供了一系列的NLP模型和算法。然而&#xff0c;Open…

【模拟开关CH440R】2022-1-20

资料模拟开关CH440芯片手册 - 百度文库 ch440R回来了&#xff0c;导通usb设备没问题&#xff0c;降压不影响。但是我发现个严重的问题&#xff0c;我的电路是直接通过4067控制ch440r接地&#xff0c;低电平&#xff0c;使能三个线路连一起的&#xff0c;邮箱的图您看看&#xf…

N-134基于java实现捕鱼达人游戏

开发工具eclipse,jdk1.8 文档截图&#xff1a; package com.qd.fish;import java.awt.Graphics; import java.io.File; import java.util.ArrayList; import java.util.List;import javax.imageio.ImageIO;public class Fishes {//定义一个集合来管理鱼List<Fish> fish…

五种多目标优化算法(NSDBO、NSGA3、MOGWO、NSWOA、MOPSO)求解微电网多目标优化调度(MATLAB代码)

一、多目标优化算法简介 &#xff08;1&#xff09;非支配排序的蜣螂优化算法NSDBO 多目标应用&#xff1a;基于非支配排序的蜣螂优化算法NSDBO求解微电网多目标优化调度&#xff08;MATLAB&#xff09;-CSDN博客 &#xff08;2&#xff09;NSGA3 NSGA-III求解微电网多目标…

应用场景丨社区燃气管网监测系统建设

燃气作为现代社会的重要能源&#xff0c;燃气被广泛应用于居民生活、工业生产、商业服务等领域。然而&#xff0c;燃气泄漏事故时有发生&#xff0c;不仅给人们的生命财产安全带来严重威胁&#xff0c;也给燃气行业的发展带来不良影响。因此&#xff0c;对于燃气管道的监测和管…

给虚拟机配置静态id地址

1.令人头大的原因 当连接虚拟机的时候 地址不一会就改变&#xff0c;每次都要重新输入 2.配置虚拟机静态id地址 打开命令窗口执行 : vim /etc/sysconfig/network-scripts/ifcfg-ens33 按下面操作修改 查看自己子网掩码 3.重启网络 命令行输入 systemctl restart netwo…

【C语言】函数(四):函数递归与迭代,二者有什么区别

目录 前言递归定义递归的两个必要条件接受一个整型值&#xff08;无符号&#xff09;&#xff0c;按照顺序打印它的每一位使用函数不允许创建临时变量&#xff0c;求字符串“abcd”的长度求n的阶乘求第n个斐波那契数 迭代总结递归与迭代的主要区别用法不同结构不同时间开销不同…

容器args中使用环境变量

1 背景 有时候需将变量传给容器&#xff0c;作为命令的参数。比如定义一个branch name&#xff0c;然后在initcontainer中clone对应的配置&#xff0c;进行后续操作。这时候我们就可以通过ConfigMap来保存这个值&#xff0c;然后在Deployment里读取这个ConfigMap&#xff0c;并…