ZetCode

Spring Boot Actuator 端点

最后修改于 2023 年 7 月 31 日

在本文中,我们将展示如何在 Spring Boot 应用程序中启用 Actuator 端点。

Spring Boot 是一个流行的应用程序框架,用于在 Java、Kotlin 或 Groovy 中创建企业应用程序。

Actuator 端点用于提供信息和监控我们的应用程序。它们通过 spring-boot-actuator 模块启用。

以下是内置 Actuator 端点的部分列表。

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

作者

我叫 Jan Bodnar,是一位充满激情的程序员,拥有丰富的编程经验。自 2007 年以来,我一直在撰写编程文章。 迄今为止,我撰写了 1,400 多篇文章和 8 本电子书。 我拥有超过十年的编程教学经验。

列出 所有 Spring Boot 教程