• 推荐
  • 评论
  • 收藏

13个Spring Boot Actuator面试问题与答案(面向5年经验开发者)

2025-05-16    9701次浏览
若您使用过Spring Boot,可能了解其核心理念在于便捷性,而Spring Boot Actuator正是体现这一理念的核心组件。该模块通过HTTP和JMX协议为应用程序提供了便捷的交互通道。从Spring Boot技术面试视角来看,该组件具有重要地位。许多开发者要求深入探讨Spring Boot Actuator的更多问题,为此我决定单独撰写一篇文章。
本文将聚焦Spring Boot Actuator的常见面试题解析,通过问题解析带您掌握这一实用的监控管理工具。
执行器(Actuator)主要用于暴露Spring Boot运行中应用的运维监控信息,包括健康状态、指标(metrics)、信息、转储、环境变量等。它通过HTTP端点或JMX bean机制,为开发人员及技术支持人员提供与应用程序运行时信息交互的接口。
当您在类路径中添加spring-boot-starter-actuator Maven依赖时,系统将默认提供多个预置端点。这正是我强调Spring Boot专注于提升开发效率与便捷性的核心理念——仅需引入一个starter依赖到项目中,即刻获得完整监控管理功能。这些开箱即用的端点包含健康检查、环境信息、指标收集等关键运维能力,无需开发者进行额外配置或编码实现。MavenorGradle生成构建文件,其余配置均将自动完成。
您可以使用这些端点查询应用程序状态及关键指标,例如已处理的请求数量、其中触发错误的请求数量等。作为Spring Boot开发者,掌握Actuator的基础知识至关重要。在大多数情况下Spring Boot 面试,面试官通常会询问Actuator的定义、工作原理及常用标准端点。若准备Spring专业认证考试,则需深入掌握该主题。例如,仅了解如何与Spring Boot应用程序交互是不够的,还需掌握如何启用/禁用特定端点。您应能够创建自定义的 HealthIndicator 并创建自定义指标。虽然本文并非Spring Boot相关操作的详细指南 但针对这些主题设置了一些思考问题以引导您深入探索。
现在,让我们看看常见的Spring Boot Actuator面试题,这些对Spring专业认证。它们选自Spring认证官方考试指南。

1. Spring Boot Actuator 提供哪些核心功能?

Spring Boot执行器允许您监控应用程序并与之交互,这对生产环境中的应用至关重要。若无Spring Boot执行器,您需通过JMX自行构建监控和交互系统。Spring Boot内置提供了该功能模块,支持动态更改日志级别等操作,且无需重启Java及Spring Boot应用程序即可生效。

2. 访问执行器端点(Spring Boot Actuator endpoints)可以使用的两种协议是什么?

Spring Boot支持通过HTTP和JMX两种方式访问执行器端点。您还可以使用Spring Security对端点进行安全保护,(通过在配置文件中设置:management.endpoints.web.exposure.include参数 来控制HTTP端点暴露范围,而JMX端点默认全部开放。安全配置需与访问协议对应实施,如HTTP采用SSL加密,JMX则通过JVM级安全策略进行管控。)在此情况下,将使用Spring Security的内容协商策略。您还可以启用SSH以访问Actuator端点。

3. Spring Boot Actuator 默认提供哪些执行器端点?

执行器默认提供了大量端点(包括敏感和非敏感类型),同时也允许您通过在application.properties文件中配置来禁用敏感端点。以下是一些开箱即用的执行器端点:
  • /Actuator - 为所有其他端点提供基于超媒体的发现页面
  • /autoconfig - 将自动配置报告按两组显示:正向匹配项与负向匹配项。
  • /beans - 显示应用中使用的所有Spring Bean
  • /configprops - 列出所有由@ConfigurationProperties注解定义的Bean所设置的配置属性。
  • /docs - 提供Actuator模块所有端点的文档,需在pom.xml中添加spring-boot-actuator-docs依赖项
  • /dump - 获取应用程序的线程转储信息
  • /env - 暴露Spring的ConfigurableEnvironment 接口的所有配置属性
  • /flyway - 提供数据库迁移脚本的完整信息;基于专用于数据库迁移的Flyway项目。
  • /health - 显示应用程序健康状态
  • /info - 显示公共应用信息
  • /logfile - 显示由logging.file配置的指定的日志文件的内容
  • /metrics - 应用相关各类指标
  • /caches - 检查可用缓存

4. Spring Boot Actuator 信息端点(/info)的用途是什么?如何提供数据?

Spring Boot Actuator的 /info 端点,可提供有关您应用程序相关信息。那么关于 Actuator,最显著的优势在于您可根据应用程序需求进行自定义。您可以在 application.properties 配置文件中,使用属性:info.app.* 增加自定义信息内容。
以下为信息端点的配置示例:
    
## Configuring info endpoint
info.app.name= My Spring Boot Application
info.app.description=This is my first spring boot application
info.app.version=1.0.0
    
Spring会自动将前缀为 info 的所有属性添加到 /info 执行器端点中显示:
    
{
    "app": {
        "description": "This is my first spring boot application",
        "version": "1.0.0",
        "name": "My Spring Boot Application"
    }
}
    

5. 如何通过 Spring Boot Actuator 日志记录器的端点修改软件包的日志级别?

Spring Boot支持在运行时通过日志记录器端点动态查看及调整应用程序的日志级别。比如:http://localhost:8080/actuator/loggers. 您可访问此端点以查看其提供的所有日志级别。此外,您还可访问端点: http://localhost:8080/actuator/loggers/root. 查看特定记录器(如根记录器)的信息。顺便提一句,从Spring Boot 2.x版本开始,默认情况下未启用大多数端点,因此您需要在配置文件中:application.properties 来激活 /loggers 端点。如下所示配置:
    
management.endpoints.web.exposure.include=loggers
management.endpoint.loggers.enabled=true
    
如果开启后,可通过访问端点来修改指定软件包的日志记录级别。如下所示:
    
$ curl -i -X POST
  -H 'Content-Type: application/json'
  -d '{"configuredLevel": "DEBUG"}'
http://localhost:8080/actuator/loggers/com.javarevisited.app.management.logging
    

6. 如何通过标签访问端点?

标签是过滤指标的有效工具,建议充分使用该功能提取有效信息。您可在端点的结尾添加任意数量的标签(tag=KEY:VALUE)来实现精细化指标筛选与管理。此功能适用于分布式监控系统、时序数据库等场景,通过键值对形式对指标进行分类标记。开发人员应在埋点阶段规范标签命名规则,运维团队可通过标签组合实现多维度的指标聚合分析。注意保持标签命名的一致性,避免使用特殊字符,建议采用小写字母加下划线的命名规范。
例如,您可能知晓应用程序已接收到10万次请求,但仅需关注产生HTTP 404或HTTP 500响应状态等错误的请求。通过使用如下所示的状态标签(status tag),即可获取该信息:
    $ curl localhost:8081/actuator/metrics/http.server.requests?tag=status:404

7. 指标(metrics )的作用是什么?

Spring Boot Actuator 的 /metrics 端点显示应用程序的指标信息,包括内存使用量、可用内存、应用程序运行时间、堆使用大小、线程使用数量等。

8. 如何创建自定义指标?

Actuator 指标由 Micrometer 实现,这意味着您可以通过 Micrometer 的 MeterRegistry 创建并发布自定义指标。只需在需要发布计数器、计时器或仪表(用于捕获应用程序指标)的位置注入 MeterRegistry 即可。以下是在 Spring Boot 中创建和注册自定义指标的示例:
    
@Component
public class OrderMetrics extends AbstractRepositoryEventListener {
    private MeterRegistry meterRegistry;

    public OrderMetrics(MeterRegistry meterRegistry) {
        this.meterRegistry = meterRegistry;
    }
}

@Override
protected void onAfterCreate(Order order{
    List items = order.getItems();
    for (Item itm : items) {
        meterRegistry.counter("orderstat", "items", item.getId()).increment();
    }
}
    

9. 什么是 Health Indicator?

Spring Boot Actuator 的 Health Indicator(健康指示器)提供应用程序的健康信息,可通过 /health 端点访问,且可被监控软件读取。默认情况下,系统会自动配置多个健康指示器。如果运行包含数据库的 Spring Boot 应用程序,将看到数据库状态;默认情况下,还会显示系统的磁盘空间状态。 运行应用程序后,可访问:http://localhost:8080/health 端点查看健康状态。

10. Spring Boot Actuator 默认提供了哪些 Health Indicator?

默认情况下,Spring Boot 会注册许多 HealthIndicator,用于报告应用程序特定方面的健康状况。几乎始终会注册的指示器包括 DiskSpaceHealthIndicator(磁盘空间健康指示器,显示磁盘当前状态)和 PingHealthIndicator(Ping 健康指示器,用作应用程序的 Ping 端点)。此外,Spring Boot 还会根据类路径中可用的依赖项和其他相关匹配条件,有选择地注册一些指示器。
默认注册的 Health Indicator 分为两类:
无条件注册(核心指示器):
  • DiskSpaceHealthIndicator:监控系统磁盘空间,防止应用因磁盘满导致故障。
  • PingHealthIndicator:提供轻量级健康检查(返回{"status":"UP"}),用于负载均衡器探测。
  • ApplicationHealthIndicator:验证应用上下文是否正常启动(Spring Boot 2.0 + 默认包含)。
条件注册(依赖类路径或配置):
  • 数据库:DataSourceHealthIndicator(需配置spring.datasource.url)
  • 消息队列:JmsHealthIndicator(需引入 JMS 依赖)
  • Redis:RedisHealthIndicator(需引入spring-boot-starter-data-redis)

11. Health Indicator 状态是什么?

健康指示器状态类似于 HTTP 状态,用于指示 Spring Boot 应用程序及其组件的健康状况。以下是一些常见状态:
  • UP:组件或子系统正常工作
  • DOWN:组件无法正常工作
  • OUT_OF_SERVICE:组件暂时不可用
  • UNKNOWN:组件状态未知
健康状态会影响 /health 端点的 HTTP 状态码。默认情况下,Spring Boot 将 DOWN 和 OUT_OF_SERVICE 状态映射为 503 状态码,而 UP 和任何未映射的状态将转换为 200 OK 状态码。

12. 默认提供了哪些 Health Indicator 状态?

如前所述,Spring Boot 默认提供以下健康指示器状态:
  • UP:组件或子系统正常工作
  • DOWN:组件无法正常工作
  • OUT_OF_SERVICE:组件暂时不可用
  • UNKNOWN:组件状态未知

13. 如何更改 Health Indicator 状态的严重程度顺序?

可使用management.health.status.order属性更改应用程序健康指示器状态的严重程度顺序。如果你在某个 HealthIndicator 实现中定义了代码为 FATAL 的新状态,还可以通过在 Spring Boot 应用程序配置中添加以下属性,注册自定义状态映射(可通过 HTTP 访问健康端点获取此状态):
    
management.health.status.order= BUSY, DOWN, OUT_OF_SERVICE, UNKNOWN, UP
management.health.status.http-mapping.FATAL=503
    
以上是针对 3-5 年经验 Java 程序员的 Spring Boot Actuator 面试题及答案。参加任何 Spring Boot 面试前,可复习这些问题。由于 Actuator 是重要主题,掌握相关知识不仅是通过 Java 和 Spring Boot 面试的关键,也有助于在日常工作中高效开发 Spring Boot 应用程序。