Spring Boot Actuator 端点
最后修改于 2023 年 7 月 31 日
在本文中,我们将展示如何在 Spring Boot 应用程序中启用 Actuator 端点。
Spring Boot 是一个流行的应用程序框架,用于在 Java、Kotlin 或 Groovy 中创建企业应用程序。
Actuator 端点用于提供信息和监控我们的应用程序。它们通过 spring-boot-actuator 模块启用。
以下是内置 Actuator 端点的部分列表。
- beans - 显示所有 Spring Bean 的完整列表
- caches - 公开可用的缓存
- env - 公开来自 Spring 的 ConfigurableEnvironment 的属性
- health - 显示应用程序健康信息
- metrics - 显示当前应用程序的指标信息
- shutdown - 允许应用程序优雅地关闭
- threaddump - 执行线程转储。
actuator 端点返回可用端点的列表。端点可用于 HTTP 和 JMX。
默认情况下,仅启用 health 端点。 我们可以通过 management.endpoints.web.exposure.include 属性启用端点
management.endpoints.web.exposure.include=*
在这里,我们使用星号运算符启用大多数端点。
management.endpoints.web.exposure.include=health,info,beans,env
我们可以仅启用特定的端点。
management.endpoint.shutdown.enabled=true
某些端点(例如 shutdown)由于其敏感性,必须显式启用。
Spring Boot Actuator 示例
以下应用程序启用 Actuator 端点。
build.gradle
...
src
├───main
│ ├───java
│ │ └───com
│ │ └───zetcode
│ │ │ Application.java
│ │ ├───actuator
│ │ │ MyEndpoint.java
│ │ └───controller
│ │ HelloController.java
│ └───resources
│ application.properties
└───test
├───java
└───resources
这是项目结构。
build.gradle
plugins {
id 'org.springframework.boot' version '3.1.1'
id 'io.spring.dependency-management' version '1.1.0'
id 'java'
}
group = 'com.zetcode'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '17'
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.springframework.boot:spring-boot-starter-actuator'
}
这是 Gradle 构建文件。 我们包含 spring-boot-starter-actuator 模块。
resources/application.properties
spring.main.banner-mode=off management.endpoints.web.exposure.include=health,beans,env,now
在 Application 属性文件中,我们启用了 health、beans、env 和 now 端点。 now 端点是一个自定义端点。
com/zetcode/controller/MyController.java
package com.zetcode.controller;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController {
@GetMapping(path = "/hello")
public ResponseEntity<String> hello() {
return ResponseEntity.ok("hello there!");
}
}
该应用程序有一个简单的控制器,其中有一个映射。
com/zetcode/actuator/MyEndpoint.java
package com.zetcode.actuator;
import org.springframework.boot.actuate.endpoint.annotation.Endpoint;
import org.springframework.boot.actuate.endpoint.annotation.ReadOperation;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;
import java.time.LocalDateTime;
@Endpoint(id="now")
@Component
public class MyEndpoint {
@ReadOperation
@Bean
public LocalDateTime now() {
return LocalDateTime.now();
}
}
我们使用 @Endpoint 创建一个自定义 Actuator。 它返回当前日期时间。
com/zetcode/Application.java
package com.zetcode;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
`Application` 设置了 Spring Boot 应用程序。
$ ./gradlew bootRun
我们构建应用程序并运行它。
$ curl localhost:8080/actuator/health
{"status":"UP"}
$ curl localhost:8080/actuator/now
"2023-07-31T16:38:54.3963529"
我们检查两个端点。
在本教程中,我们使用了 Actuator 端点。