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 端点。