SpringBoot Actuator详解(四十八)

news2024/11/17 17:27:41

还是要开心的,万一梦想真得实现了呢

上一章简单介绍了SpringBoot日志配置(四十七) , 如果没有看过,请观看上一章

本章节详细参考了: https://www.cnblogs.com/caoweixiong/p/15325382.html

Spring Boot Actuator 模块提供了生产级别的功能,比如健康检查,审计,指标收集,HTTP 跟踪等,

帮助我们监控和管理Spring Boot 应用。

老蝴蝶这里采用 Spring 2.X 版本的

一.集成 Actuator 的使用

在一个SpringBoot 可运行的老项目上 直接添加依赖

一.一 pom.xml 中添加依赖

    <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>

一.二 访问验证

在原先的访问基础上, 添加 /actuator 路径进行访问 (/actuator 是默认的访问路径)

如之前的访问路径是: http://localhost:8088/StockApi

那么访问网址: http://localhost:8088/StockApi/actuator

image-20230608101910532

该页面会展示可以访问的路径信息, 如访问 /actuator/health

image-20230608102107851

UP 表示服务是正常的, 状态为 200

/health /info 叫做 endpoint, 有很多种 endpoin

二. Actuator 详细讲解

二.一 Endpoints 介绍

Spring Boot 提供了所谓的 endpoints (下文翻译为端点)给外部来与应用程序进行访问和交互。

打比方来说,/health 端点 提供了关于应用健康情况的一些基础信息。metrics 端点提供了一些有用的应用程序指标(JVM 内存使用、系统CPU使用等)。

这些 Actuator 模块本来就有的端点我们称之为原生端点。根据端点的作用的话,我们大概可以分为三大类:

  • 应用配置类:获取应用程序中加载的应用配置、环境变量、自动化配置报告等与Spring Boot应用密切相关的配置类信息。
  • 度量指标类:获取应用程序运行过程中用于监控的度量指标,比如:内存信息、线程池信息、HTTP请求统计等。
  • 操作控制类:提供了对应用的关闭等操作类功能。

需要注意的就是:

  • 每一个端点都可以通过配置来单独禁用或者启动
  • 不同于Actuator 1.x,Actuator 2.x 的大多数端点默认被禁掉。 Actuator 2.x 中的默认端点增加了/actuator前缀。默认暴露的两个端点为/actuator/health/actuator/info

Actuator 提供的所有 endpoint:

HTTP方法Endpoint描述
GET/actuator查看有哪些 Actuator endpoint 是開放的
GET/actuator/auditevent查看 audit 的事件,例如認證進入、訂單失敗,需要搭配 Spring security 使用,sample code
GET/actuator/beans查看運行當下裡面全部的 bean,以及他們的關係
GET/actuator/conditions查看自動配置的結果,記錄哪些自動配置條件通過了,哪些沒通過
GET/actuator/configprops查看注入帶有 @ConfigurationProperties 類的 properties 值為何(包含默認值)
GET/actuator/env (常用)查看全部環境屬性,可以看到 SpringBoot 載入了哪些 properties,以及這些 properties 的值(但是會自動*掉帶有 key、password、secret 等關鍵字的 properties 的值,保護安全資訊)
GET/actuator/flyway查看 flyway DB 的 migration 資訊
GET/actuator/health (常用)查看當前 SpringBoot 運行的健康指標,值由 HealthIndicator 的實現類提供(所以可以自定義一些健康指標資訊,加到這裡面)
GET/actuator/heapdump取得 JVM 當下的 heap dump,會下載一個檔案
GET/actuator/info查看 properties 中 info 開頭的屬性的值,沒啥用
GET/actuator/mappings查看全部的 endpoint(包含 Actuator 的),以及他們和 Controller 的關係
GET/actuator/metrics(常用)查看有哪些指標可以看(ex: jvm.memory.max、system.cpu.usage),要再使用/actuator/metrics/{metric.name}分別查看各指標的詳細資訊
GET/actuator/scheduledtasks查看定時任務的資訊
POST/actuator/shutdown唯一一個需要 POST 請求的 endpoint,關閉這個 SpringBoot 程式

二.二 端点配置

上面是 Actuator 提供的所有的 endpoints, 可以通过配置, 进行选择的将这些功能曝露出来。

二.二.一 默认配置

PropertyDefault
management.endpoints.jmx.exposure.exclude
management.endpoints.jmx.exposure.include*
management.endpoints.web.exposure.exclude
management.endpoints.web.exposure.includeinfo, healt

因為安全的因素,所以 Actuator 默認只會開放/actuator/health/actuator/info這兩個 endpoint,

如果要開放其他 endpoint 的話,需要額外在 application.yaml 中做設置。

我们可以通过以上配置,来配置通过JMX 和 HTTP 暴露的端点。

二.二.二 曝露配置

  1. 打开所有的监控点, 不包含 shutdown , 注意 * 要加上 双引号
management:
  endpoints:
    web:
      exposure:
        # 打开所有的监控点
        include: "*"

image-20230608103846208

  1. 除了原有的 health 和 info 外,再打开其他的,如 beans 和 mappings
management:
  endpoints:
    web:
      exposure:
        # 只打开特定的几个
        include: beans,mappings,health,info

image-20230608103744731

  1. exclude 排除某些
management:
  endpoints:
    web:
      exposure:
        # 排除 metrics,threaddump
        exclude: metrics,threaddump
        # 打开全部
        include: "*"

image-20230608104130486

  1. 开放 shutdown
management:
  endpoints:
    web:
      exposure:
        # 打开全部
        include: "*"
  endpoint:
    shutdown:
      # 通过指定接口关闭 SpringBoot
      enabled: true

image-20230608104508467

二.二.三 路径映射

默认情况下所有端点都暴露在“/actuator”路径下 , 各种 endpoints 对应的 href 也是默认给定的。 这是可以改变的。

management:
  endpoints:
    web:
      exposure:
        # 打开全部
        include: "*"
      # 自定义监控路径 manage
      base-path: /manage
      path-mapping:
        # 修改某些 endpoint 的路径配置
        health: myhealth
  endpoint:
    shutdown:
      # 通过指定接口关闭 SpringBoot
      enabled: true

原先的路径是 404 了

image-20230608105440300

需要通过 /manage 进行访问

image-20230608105543759

其中观察到 health 的 href 也发生了改变

image-20230608105610284

二.二.四 管理端口调整

我们访问 /actuator 时, 并没有输入端口, 默认跟server.port一样,

我们可以指定端口, 可以防止被其他人猜到

management:
  server:
    port: 8089
  endpoints:
    web:
      exposure:
        # 打开全部
        include: "*"

通过 8088 端口访问的时候

image-20230608110153628

使用 8089 端口访问时,要 去掉 项目名

http://localhost:8089/actuator

image-20230608110244660

二.二.五 端点响应缓存

对于一些不带参数的端点请求会自动进行缓存,

我们可以通过如下方式配置缓存时间,下面配置表示 beans 端点的缓存时间为 100s

management:
  endpoints:
    web:
      exposure:
        # 打开全部
        include: "*"
  endpoint:
    beans:
      cache:
        time-to-live: 100s

二.三 重要端口解析

将个性化的配置都进行还原 (端口,默认路径等)

management:
  endpoints:
    web:
      exposure:
        # 打开全部
        include: "*"
  endpoint:
    beans:
      cache:
        time-to-live: 100s
#    health:
#      show-details: always
    shutdown:
      # 通过指定接口关闭 SpringBoot
      enabled: true

二.三.一 /health

health 配置

当我们开启health的健康端点时,我们能够查到应用健康信息是一个汇总的信息,

访问 http://localhost:8088/StockApi/actuator/health 时,我们获取到的信息是{"status":"UP"}

status的值还有可能是 DOWN。

image-20230608112550767

要想查看详细的应用健康信息需要配置:

management.endpoint.health.show-details=always
management:
  endpoints:
    web:
      exposure:
        # 打开全部
        include: "*"
  endpoint:
    health:
      show-details: always
    shutdown:
      # 通过指定接口关闭 SpringBoot
      enabled: true

该属性可以使用以下值之一进行配置:

  1. never:不展示详细信息,up或者down的状态,默认配置
  2. when-authorized:详细信息将会展示给通过认证的用户。授权的角色可以通过management.endpoint.health.roles配置
  3. always:对所有用户暴露详细信息

image-20230608115647994

会进行 数据库, 磁盘, ping, redis 邮箱(如果有引用的话)等重要组件的检测。

/health端点有很多自动配置的健康指示器:如redis、rabbitmq、db等组件。

当你的项目有依赖对应组件的时候,这些健康指示器就会被自动装配,继而采集对应的信息。

当如上的组件有一个状态异常,应用服务的整体状态即为down。我们也可以通过配置禁用某个组件的健康监测。

management.health.mongo.enabled: false

或者禁用所有自动配置的健康指示器:

management.health.defaults.enabled: false

二.三.二 /metrics

  • 查看所有可追踪的度量

/metrics端点用来返回当前应用的各类重要度量指标,比如:内存信息、线程信息、垃圾回收信息、tomcat、数据库连接池等。

{
  "names": [
    "jvm.memory.max",
    "jvm.threads.states",
    "jvm.gc.memory.promoted",
    "jvm.memory.used",
    "jvm.gc.max.data.size",
    "jvm.gc.pause",
    "jvm.memory.committed",
    "system.cpu.count",
    "logback.events",
    "jvm.buffer.memory.used",
    "jvm.threads.daemon",
    "system.cpu.usage",
    "jvm.gc.memory.allocated",
    "jvm.threads.live",
    "jvm.threads.peak",
    "process.uptime",
    "process.cpu.usage",
    "jvm.classes.loaded",
    "jvm.classes.unloaded",
    "jvm.gc.live.data.size",
    "jvm.buffer.count",
    "jvm.buffer.total.capacity",
    "process.start.time"
  ]
}

image-20230608133704849

各个指标说明如下:

序号参数参数说明是否监控监控手段重要度
JVM
1jvm.memory.maxJVM 最大内存
2jvm.memory.committedJVM 可用内存展示并监控堆内存和 Metaspace重要
3jvm.memory.usedJVM 已用内存展示并监控堆内存和 Metaspace重要
4jvm.buffer.memory.usedJVM 缓冲区已用内存
5jvm.buffer.count当前缓冲区数
6jvm.threads.daemonJVM 守护线程数显示在监控页面
7jvm.threads.liveJVM 当前活跃线程数显示在监控页面;监控达到阈值时报警重要
8jvm.threads.peakJVM 峰值线程数显示在监控页面
9jvm.classes.loaded加载 classes 数
10jvm.classes.unloaded未加载的 classes 数
11jvm.gc.memory.allocatedGC 时,年轻代分配的内存空间
12jvm.gc.memory.promotedGC 时,老年代分配的内存空间
13jvm.gc.max.data.sizeGC 时,老年代的最大内存空间
14jvm.gc.live.data.sizeFullGC 时,老年代的内存空间
15jvm.gc.pauseGC 耗时显示在监控页面
TOMCAT
16tomcat.sessions.createdtomcat 已创建 session 数
17tomcat.sessions.expiredtomcat 已过期 session 数
18tomcat.sessions.active.currenttomcat 活跃 session 数
19tomcat.sessions.active.maxtomcat 最多活跃 session 数显示在监控页面,超过阈值可报警或者进行动态扩容重要
20tomcat.sessions.alive.max.secondtomcat 最多活跃 session 数持续时间
21tomcat.sessions.rejected超过 session 最大配置后,拒绝的 session 个数显示在监控页面,方便分析问题
22tomcat.global.error错误总数显示在监控页面,方便分析问题
23tomcat.global.sent发送的字节数
24tomcat.global.request.maxrequest 最长时间
25tomcat.global.request全局 request 次数和时间
26tomcat.global.received全局 received 次数和时间
27tomcat.servlet.requestservlet 的请求次数和时间
28tomcat.servlet.errorservlet 发生错误总数
29tomcat.servlet.request.maxservlet 请求最长时间
30tomcat.threads.busytomcat 繁忙线程显示在监控页面,据此检查是否有线程夯住
31tomcat.threads.currenttomcat 当前线程数(包括守护线程)显示在监控页面重要
32tomcat.threads.config.maxtomcat 配置的线程最大数显示在监控页面重要
33tomcat.cache.accesstomcat 读取缓存次数
34tomcat.cache.hittomcat 缓存命中次数
CPU
35system.cpu.countCPU 数量
36system.load.average.1mload average超过阈值报警重要
37system.cpu.usage系统 CPU 使用率
38process.cpu.usage当前进程 CPU 使用率超过阈值报警
39http.server.requestshttp 请求调用情况显示 10 个请求量最大,耗时最长的 URL;统计非 200 的请求量重要
40process.uptime应用已运行时间显示在监控页面
41process.files.max允许最大句柄数配合当前打开句柄数使用
42process.start.time应用启动时间点显示在监控页面
43process.files.open当前打开句柄数监控文件句柄使用率,超过阈值后报警重要
  • 查看某个度量的详细信息

不同于1.x,Actuator在这个界面看不到具体的指标信息,只是展示了一个指标列表。为了获取到某个指标的详细信息,我们可以请求具体的指标信息,像这样:

http://localhost:8088/StockApi/actuator/metrics/{name}

如查询 jvm.buffer.memory.used

http://localhost:8088/StockApi/actuator/metrics/jvm.buffer.memory.used

image-20230608134010557

除了使用 metrics 端点默认的这些统计指标外,我们还可以实现自定义统计指标。Metrics 提供 4 种基本的度量类型:Gauge、Counter、Timer、Summary

关于这些的用法,老蝴蝶直接就抄写原文档了。

1,Gauge(计量器)

Gauge(计量器)是最简单的度量类型,只有一个简单的返回值,他用来记录一些对象或者事物的瞬时值。

(1)假设我们在一个 Contoller 使用一个类型为 Gauge 的计数器来记录一个数值:

@RestController
public class HelloController { 
    @GetMapping("/hello")
    public void hello() {
        Metrics.gauge("user.test.gauge", 3);
    }
}

(2)通过 /actuator/metrics 接口可以看到我们自定义的这个指标:
img

(3)假设我们访问了 /hello 接口后,再次通过 /actuator/metrics/user.test.gauge 这个自定义度量的消息信息,显示如下:

img

2,Counter(计数器)

Counter(计数器)简单理解就是一种只增不减的计数器。它通常用于记录服务的请求数量、完成的任务数量、错误的发生数量等等。

(1)为方便使用首先我们自定义一个计数器服务:

@Service
public class MyCounterService {
    static final Counter userCounter = Metrics.counter("user.counter.total", "services", "demo"); 
    public void processCollectResult() {
        userCounter.increment(1D);
    }
}

(2)然后增加一个 controller,触发这个服务:


@RestController
public class HelloController {
 
    @Autowired
    MyCounterService myCounterService;
 
    @GetMapping("/hello")
    public void hello() {
        myCounterService.processCollectResult();
    }
}

(3)通过 /actuator/metrics 接口可以看到我们自定义的这个指标:
img

(4)假设我们访问了 3 次 /hello 接口,再次通过 /actuator/metrics/user.counter.total 这个自定义度量的消息信息,显示如下:
img

3,Timer(计时器)

Timer(计时器)可以同时测量一个特定的代码逻辑块的调用(执行)速度和它的时间分布。

简单来说,就是在调用结束的时间点记录整个调用块执行的总时间,适用于测量短时间执行的事件的耗时分布,例如消息队列消息的消费速率。

(1)假设我们在一个 Contoller 使用 Timer 来记录某个方法的执行时长:

注意:在实际生产环境中,可以通过 spring-aop 把记录方法耗时的逻辑抽象到一个切面中,这样就能减少不必要的冗余的模板代码。

@RestController
public class HelloController {
 
    private Timer timer = Metrics.timer("user.test.timer","timer", "timersample");
 
    @GetMapping("/hello")
    public void hello() {
 
        // 执行createOrder方法并记录执行时间
        timer.record(() -> createOrder());
    }
 
    //模拟方法耗时
    private void createOrder() {
        try {
            TimeUnit.SECONDS.sleep(3);
        } catch (InterruptedException e) {
        }
    }
}

(2)假设我们访问了 3 次 /hello 接口,再次通过 /actuator/metrics/user.test.timer 这个自定义度量的消息信息,显示如下:

img

4,Summary(摘要)

Summary(摘要)用于跟踪事件的分布。它类似于一个计时器,但更一般的情况是,它的大小并不一定是一段时间的测量值。

在 micrometer 中,对应的类是 DistributionSummary,它的用法有点像 Timer,但是记录的值是需要直接指定,而不是通过测量一个任务的执行时间。

(1)假设我们在一个 Contoller 使用 Summary 来连续记录三次值:

@RestController
public class HelloController {
 
    private DistributionSummary summary = Metrics.summary("user.test.summary","summary", "summarysample");
 
    @GetMapping("/hello")
    public void hello() {
        summary.record(2D);
        summary.record(3D);
        summary.record(4D);
    }
}

(2)假设我们访问 /hello 接口后,再次通过 /actuator/metrics/user.test.summary 这个自定义度量的消息信息,显示如下:
img

二.三.三 /info

/info端点可以用来展示应用信息,主要包含三大类:自定义信息、Git 信息、以及项目构建信息。

http://localhost:8088/StockApi/actuator/info

原配置查询:

image-20230608134454416

可以进行自定义配置

## 描述项目基础信息
info:
  app:
    name: StockTool
    port: Xxxx
    version: 2.0.0
    author: 岳泽霖

image-20230608134606907

二.三.四 /beans

/beans端点会返回Spring 容器中所有bean的别名、类型、是否单例、依赖等信息。

http://localhost:8088/StockApi/actuator/beans

image-20230608134806775

二.三.五 /heapdump

会自动生成一个 Jvm 的堆文件 heapdump, 可以查看内存快照

http://localhost:8088/StockApi/actuator/heapdump

二.三.六 /threaddump

方便我们在日常定位问题的时候查看线程的情况。 主要展示了线程名、线程ID、线程的状态、是否等待锁资源、线程堆栈等信息。就是可能查看起来不太直观

http://localhost:8088/StockApi/actuator/threaddump

image-20230608135021081

二.三.七 /loggers

  • 查看日志等级

/loggers 端点暴露了我们程序内部配置的所有logger的信息

http://localhost:8088/StockApi/actuator/loggers

image-20230608135212939

可以单独访问某个类的日志情况

name 为 包名 或者具体的类全限定名称

http://localhost:8088/StockApi/actuator/loggers/{name}

image-20230608135503106

image-20230608135446229

  • 改变运行时日志等级

/loggers端点能够动态修改你的日志等级。

url 为 要修改的路径

image-20230608135822002

{
  "configuredLevel": "DEBUG"
}

修改成 DEBUG 级别

image-20230608135919855

二.三.八 /shutdown 关闭

属于操作控制类端点,可以优雅关闭 Spring Boot 应用。要使用这个功能首先需要在配置文件中开启

management.endpoint.shutdown.enabled=true
management:
  endpoints:
    web:
      exposure:
        # 打开全部
        include: "*"
  endpoint:
    health:
      show-details: always
    shutdown:
      # 通过指定接口关闭 SpringBoot
      enabled: true

目前程序还在启动中, 在 ApiFox 中执行应用

image-20230608140212079

在 idea 中, 应用也确实关闭了。



谢谢您的观看,如果喜欢,请关注我,再次感谢 !!!

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

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

相关文章

.locked加密勒索数据库级别恢复---惜分飞

有客户数据库被加密成.locked结尾的扩展名,数据库无法正常使用 对应的READ_ME1.html文件中信息类似:send 0.1btc to my address:bc1ql8an5slxutu3yjyu9rvhsfcpv29tsfhv3j9lr4. contact email:servicehellowinter.online,if you can’t contact my email, please contact some d…

Leetcode-6425. 找到最长的半重复子字符串

题目描述 给你一个下标从 0 开始的字符串 s &#xff0c;这个字符串只包含 0 到 9 的数字字符。 如果一个字符串 t 中至多有一对相邻字符是相等的&#xff0c;那么称这个字符串是 半重复的 。 请你返回 s 中最长 半重复 子字符串的长度。 一个 子字符串 是一个字符串中一段…

Redis第十章 Redis HyperLogLog与事务、Redis 7.0前瞻

HyperLogLog HyperLogLog(Hyper[ˈhaɪpə])并不是一种新的数据结构(实际类型为字符串类型)&#xff0c;而是一种基数算法,通过 HyperLogLog 可以利用极小的内存空间完成独立总数的统计&#xff0c;数据集可以是 IP、Email、ID 等。 如果你的页面访问量非常大&#xff0c;比如…

JUC基础认识(2)

线程池(重点)&#xff1a;3大方法&#xff0c;7大参数&#xff0c;4种拒绝策略 程序运行的本质:占用系统资源&#xff01;优化资源的使用&#xff01;----->池化技术 池化技术的好处: 1.降低资源的消耗 2.提高响应速度 3.方便管理 线程复用&#xff0c;可以控制最大…

Java ~ Reference ~ FinalizerHistogram【总结】

前言 文章 相关系列&#xff1a;《Java ~ Reference【目录】》&#xff08;持续更新&#xff09;相关系列&#xff1a;《Java ~ Reference ~ FinalizerHistogram【源码】》&#xff08;学习过程/多有漏误/仅作参考/不再更新&#xff09;相关系列&#xff1a;《Java ~ Referenc…

通俗讲解元学习(Meta-Learning)

元学习通俗的来说&#xff0c;就是去学习如何学习&#xff08;Learning to learn&#xff09;,掌握学习的方法&#xff0c;有时候掌握学习的方法比刻苦学习更重要&#xff01; 下面我们进行详细讲解 1. 从传统机器学习到元学习 传统的机器学中&#xff0c;我们选择一个算法&…

Fiddler汉化(一箭三连)

我安装的fiddler 操作系统是&#xff1a;Win10 64Bit 操作系统的版本号是&#xff1a;v5.0.20194.41348 for .NET 4.6.1 fiddler下载地址&#xff1a; 我用夸克网盘分享了「02-Web调试工具-FiddlerSetup.exe」&#xff0c;点击链接即可保存。 链接&#xff1a;https://pan.quar…

python调用go语言的代码

最近在学习上述Python&#xff0c;go语言&#xff0c;研究下互相调用的事项&#xff0c;在windows下使用 linux下&#xff1a; gcc -o libpycall.so -shared -fPIC pycall.c windows下&#xff1a; gcc -o libpycall.dll -shared -fPIC pycall.c 但是实际的过程中编译成*.so…

使用扩展卡尔曼滤波(EKF)融合激光雷达和雷达数据(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

复习js的Object.defineProperty()

今天在看尚硅谷的Vue2时&#xff0c;讲到了Object.defineProperty()方法&#xff0c;有点忘了&#xff0c;所以找资料复习了一下。 总说 Object.defineProperty()是一种用于定义对象属性的JavaScript方法&#xff0c;它允许开发人员精确控制一个属性的行为&#xff0c;并可以…

【MySQL】库表的基本操作

文章目录 数据库的基本操作增查删改切入查看当前使用数据库 数据表的基本操作增查所有表查指定表查表字段信息删表改表名改字段名改字段属性增字段删字段 数据表的约束主键约束(PRIMARY KEY)非空约束(NOT NULL)默认值约束(DEFAULT)唯一性约束(UNIQUE)外键约束(FOREIGN KEY)删除…

VSCode 配置 C++ 环境

文章目录 VSCode 配置 C 环境1. 配置 C 编译器1.1 下载 MinGW1.2 添加环境变量1.3 测试 2. 配置编辑器 VSCode2.1 下载 VSCode2.2 安装插件2.3 运行代码 3. 优化Reference VSCode 配置 C 环境 VSCode&#xff08;Visual Studio Code&#xff09;是一款轻量级的代码编辑器&…

Linux系统之部署Node.js环境

Linux系统之部署Node.js环境 一、Node.js介绍1.1 Node.js简介1.2 npm简介1.3 Node.js官网 二、本地环境介绍2.1 本地环境规划2.2 本次实践介绍 三、部署Node.js环境3.1 下载Node.js安装包3.2 解压Node.js安装包3.3 复制二进制文件3.4 配置环境变量3.5 检查node及npm版本 四、NP…

EXCEL的自定义格式,比如 @_ ,一个我很少用的功能的简单总结

目录 前言 1 入口&#xff1a; 2 有用的一些功能 2.1 可以自动在 你输入的字符串前后加 预设内容 2.1.1 具体见下面 2.1.2 对比EXCEL得常用拖动功能 2.2 设置填充下划线 2.2.1 效果如下 2.2.2 问题 2.2.3 下划线的显示问题 2.3 比如 #.## 2.4 比如 000.000 2.5 比…

自动化测试webdriver常用API总结

目录 前言&#xff1a; 1. selenium的简单介绍 2. selnium的下载 3. WebDriver常用API 前言&#xff1a; WebDriver 是一个自动化测试工具&#xff0c;主要用于模拟浏览器行为&#xff0c;实现自动化测试。下面是一些 WebDriver 常用 API 总结&#xff1a; 1. selenium的…

STM32--ESP8266物联网WIFI模块(贝壳物联)--远程无线控制点灯

本文适用于STM32F103C8T6等MCU&#xff0c;其他MCU可以移植&#xff0c;完整资源见文末链接 一、简介 随着移动物联网的发展&#xff0c;各场景下对于物联控制、数据上传、远程控制的诉求也越来越多&#xff0c;基于此乐鑫科技推出了便宜好用性价比极高的wifi物联模块——ESP…

CentOS 7.6安装 MongoDB 5.0.2

1、选择下载地址 进入下载官网 https://www.mongodb.com/try/download/community 选择右侧MongoDB Community Server Version&#xff1a;5.0.2&#xff08;current&#xff09; Platform&#xff1a;RedHat / CentOS 7.0 Package&#xff1a;tgz 点击Copy复制 安装位置&am…

爆肝总结,软件测试-常见并发问题+解决方案,测试进阶...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 并发测试的定义 …

LVS负载均衡--NET模式

目录 企业群集应用概率 群集的含义 问题 根据群集所针对的目标差异&#xff0c;可分为三种类型 负载均衡群集(Load Balance Cluster) 高可用群集(High Availability Cluster) 高性能运算群集(High Performance Computer Cluster) 负载均衡群集架构 负载均衡的结构 LV…

XuperChain搭建+报错+注意事项

安装依赖 golang 这里安装的是15-17版本 wget -c https://dl.google.com/go/go1.15.2.linux-amd64.tar.gz -O - | sudo tar -xz -C /usr/local 添加环境变量 这个可以通过添加下面的行到/etc/profile文件(系统范围内安装)或者$HOME/.profile文件(当前用户安装 vim /etc…