Bootstrap

Spring Boot教程之八:Spring Boot执行器(Actuator)

 Spring Boot 执行器

开发和管理应用程序是应用程序生命周期中最重要的两个方面。了解应用程序底层发生的事情非常重要。此外,当我们将应用程序投入生产时,管理它逐渐变得至关重要。因此,始终建议在开发阶段和生产阶段都监控应用程序。 

对于相同的用例,Spring Boot 提供了一个执行器依赖项,可用于监控和管理您的 Spring Boot 应用程序,通过 /actuator 和 /actuator/health 端点您可以达到监控的目的。

  • 借助Spring Boot,我们可以实现上述目标。
  • Spring Boot 的“Actuator”依赖项用于监控和管理 Spring Web 应用程序。
  • 我们可以借助 HTTP 端点或 JMX 来使用它来监控和管理应用程序。

弹簧执行器的工作原理

弹簧执行器的工作原理

执行器应用优势

  1. 它提高了客户满意度。
  2. 它减少了停机时间。
  3. 它提高了生产力。
  4. 它改善了网络安全管理。
  5. 它提高了转化率。

1. 执行器配置

为了使用 Hibernate 验证器,您的 Spring Boot 项目中必须进行这些配置。

1.1 执行器的依赖关系

要使用“Actuator”,请在应用程序的项目设置文件中添加以下依赖项。

Maven 和 Gradle 构建系统的依赖配置。

Maven -> pom.xml

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

Gradle

-> build.gradle

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-actuator'
}

1.2 Actuator 的应用程序属性配置

Actuator 还有更多可用的配置,下面列出其中一些:

  • 您还可以通过在 application.properties 文件中添加以下内容来更改默认端点。
management.endpoints.web.base-path=/details
  • 包括 ID/端点

默认情况下,除“health”外,所有 ID 均设置为 false。要包含 ID,请在 application.properties 文件中使用以下属性。

management.endpoint.<id>.enabled

Example -> management.endpoint.metrics.enabled=true
  • 列出您想要包含的所有 ID,并以逗号分隔。
management.endpoints.web.exposure.include=metrics,info
  • 仅包括指标和信息 ID,并排除所有其他信息(也包括‘Health’)。

要添加/包含有关应用程序的所有 ID 信息,您可以在 application.properties 文件中添加以下内容 -

management.endpoints.web.exposure.include=*
  • 排除 ID/端点

要排除 ID 或端点,请使用以下属性并在 application.properties 文件中列出用逗号分隔的相应 ID。

management.endpoints.web.exposure.exclude

Example -> management.endpoints.web.exposure.exclude=info

项目的文件夹结构

下图展示了你的项目应该是什么样子

项目结构 - Maven

项目结构——Maven

2. 项目实施

2.1 实体

UserEntity.java(代表模型数据的实体类)解释如下:

  • 此类充当简单的 Java bean,其属性由 REST API 的 get() 方法以 JSON 响应形式返回。
  • 'Lombok' 库用于在运行时使用 ' @Data ' 注释自动生成 GETTER/SETTER 方法。
  • @RequiredArgsConstructor ' 注释用于生成零参数构造函数,如果存在 final 或 ' @NonNull'字段,则创建相应的参数构造函数。
  • 要在您的应用程序中添加“ Lombok ”库,请在应用程序的项目构建中添加以下依赖项。
  • 使用' @Component '注释以便该bean自动在Spring的应用程序上下文中注册。
  • Java

 package gfg;

import lombok.Data;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Component;
 
@Component
@Data
@RequiredArgsConstructor
public class UserEntity {
    String id = "1";
    String name = "Darshan.G.Pawar";
    String userName = "@drash";
    String email = "drash@geek";
    String pincode = "422-009";
}

2.2 控制器

RESTfulController.java(REST API 控制器),用于定义 API 和测试程序。

该控制器的 get() 方法使用 UserEntity bean 返回 JSON 响应。UserEntiy bean 通过在 Spring 的应用程序上下文中注册的“ @Autowired ”注释进行外包。

  • Java
package gfg;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/get")
public class RESTfulController {
 
    @Autowired
    UserEntity entity;
   
    @GetMapping("/data")
      public UserEntity getEntity(){
        return entity;
    }
}

3.测试执行器 API

3.1 控制器 API

这里使用 JSON Formatter Chrome 扩展程序自动解析 JSON 主体。此外,它还需要与“Actuator”配合使用。

REST API 返回的 JSON 响应

REST API 返回的 JSON 响应

3.2 使用 Spring Boot Actuator API

要访问“执行器”服务,您必须使用 HTTP 端点,因为它变得可靠。

3.2.1 /actuator

很简单,只需点击默认端点“/actuator”,确保您的应用程序正在运行。

例子:

您还可以通过在 application.properties 文件中添加以下内容来更改默认端点。

management.endpoints.web.base-path=/details

3.2.2 /actuator/health

您可以点击上述链接查看相关信息。此外,您还可以激活其他 Actuator ID,并在“/actuator”后使用它们来查看更多信息。例如,“health”ID 默认已激活。因此,您可以点击图像中的链接或直接使用“http://localhost:8080/actuator/health”。

应用程序的健康状况

应用程序的健康状况

“UP” 表示应用程序的健康状况良好。一共有 25 个 ID,其中最常用的列在这里 –

ID

描述         

beans显示应用程序中所有 Spring bean 的完整列表。
caches 公开可用的缓存。
conditions显示对配置和自动配置类进行评估的条件以及它们匹配或不匹配的原因。
health显示应用程序健康信息。
httptrace显示 HTTP 跟踪信息(默认情况下,显示最后 100 个 HTTP 请求-响应交换)。需要 HttpTraceRepository bean。
loggers显示和修改应用程序中记录器的配置。
mappings显示所有@RequestMapping路径的整理列表。
sessions允许从 Spring Session 支持的会话存储中检索和删除用户会话。需要使用 Spring Session 的基于 servlet 的 Web 应用程序。
threaddump执行线程转储。
3.2.3 /actuator/beans

访问上述项目的“beans”ID

访问上述项目的“beans”ID

3.2.4 /actuator/mappings

访问上述项目的“映射”ID

访问上述项目的“映射”ID

包括 ID/端点

默认情况下,除“health”外,所有 ID 均设置为 false。要包含 ID,请在 application.properties 文件中使用以下属性。

management.endpoint.<id>.enabled

Example -> management.endpoint.metrics.enabled=true

或者,您可以列出所有想要包含的 ID,并以逗号分隔。

management.endpoints.web.exposure.include=metrics,info

这将仅包括指标和信息 ID,并将排除所有其他信息(“健康”也是如此)。要添加/包含有关应用程序的所有 ID 信息,您可以在 application.properties 文件中添加以下内容 -

management.endpoints.web.exposure.include=*

输出:

所有 ID 或端点现已启用

所有 ID 或端点现已启用

排除 ID/端点

要排除 ID 或端点,请使用以下属性并在 application.properties 文件中列出用逗号分隔的相应 ID。

management.endpoints.web.exposure.exclude

Example -> management.endpoints.web.exposure.exclude=info

使用“*”代替属性中的 ID 以排除所有 ID 或端点。

笔记: 

  1. 在设置 management.endpoints.web.exposure.include 之前,请确保暴露的执行器不包含敏感信息。
  2. 应将它们置于防火墙后面以确保安全,或通过 Spring Security 之类的工具确保安全。  

悦读

道可道,非常道;名可名,非常名。 无名,天地之始,有名,万物之母。 故常无欲,以观其妙,常有欲,以观其徼。 此两者,同出而异名,同谓之玄,玄之又玄,众妙之门。

;