You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot 2.3 Actuator无法扩展暴露端点问题排查求助

解决Spring Boot 2.3 Actuator端点无法扩展的问题

一、追踪属性management.endpoints.web.exposure.include的设置来源

1. 利用Actuator的Env端点直接查看

你已启用env端点,直接访问:

http://localhost:9050/actuator/env/management.endpoints.web.exposure.include

返回结果会列出该属性的所有加载来源(如系统属性、环境变量、配置文件、自定义PropertySource等),以及最终生效的来源,可直接定位覆盖配置的源头。

2. 启用日志调试属性加载过程

启动项目时添加JVM参数:

-Dlogging.level.org.springframework.core.env=DEBUG

启动后日志会详细打印每个属性的加载顺序和来源,搜索management.endpoints.web.exposure.include即可找到配置被覆盖的具体环节。

3. 编程遍历PropertySources定位来源

添加配置类,遍历环境中的所有属性源并打印目标属性的存在情况:

import org.springframework.context.annotation.Configuration;
import org.springframework.core.env.ConfigurableEnvironment;
import org.springframework.core.env.PropertySource;
import javax.annotation.PostConstruct;
import java.util.Iterator;

@Configuration
public class PropertyTraceConfig {
    private final ConfigurableEnvironment environment;

    public PropertyTraceConfig(ConfigurableEnvironment environment) {
        this.environment = environment;
    }

    @PostConstruct
    public void tracePropertySource() {
        String targetProperty = "management.endpoints.web.exposure.include";
        Iterator<PropertySource<?>> iterator = environment.getPropertySources().iterator();
        while (iterator.hasNext()) {
            PropertySource<?> source = iterator.next();
            if (source.containsProperty(targetProperty)) {
                System.out.printf("属性[%s]在源[%s]中找到,值为:%s%n",
                        targetProperty, source.getName(), source.getProperty(targetProperty));
            }
        }
    }
}

启动后控制台会输出该属性在各个源中的值,能明确看到哪个源优先级更高导致你的配置被覆盖。

二、强制暴露所需端点的方法

如果暂时无法定位来源,可通过编程方式强制覆盖配置:

1. 直接修改WebEndpointProperties

添加配置类,在项目启动后强制设置要暴露的端点:

import org.springframework.boot.actuate.autoconfigure.endpoint.web.WebEndpointProperties;
import org.springframework.context.annotation.Configuration;
import javax.annotation.PostConstruct;
import java.util.Set;

@Configuration
public class ForceExposeEndpointsConfig {
    private final WebEndpointProperties webEndpointProperties;

    public ForceExposeEndpointsConfig(WebEndpointProperties webEndpointProperties) {
        this.webEndpointProperties = webEndpointProperties;
    }

    @PostConstruct
    public void overrideExposedEndpoints() {
        webEndpointProperties.getExposure().setInclude(Set.of("loggers", "health", "info", "prometheus", "metrics"));
    }
}

该方式会在Spring Boot自动配置完成后直接修改生效的配置属性,优先级最高。

2. 检查依赖完整性

确认已引入Prometheus所需依赖(若未添加):

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
    <groupId>io.micrometer</groupId>
    <artifactId>micrometer-registry-prometheus</artifactId>
</dependency>

缺少micrometer依赖会导致prometheus端点无法被识别。

3. 修正配置文件笔误

你的application.yaml中exposure.include写的是logging,正确端点名称为loggers,建议修正以避免混淆。

内容的提问来源于stack exchange,提问作者richardhunghhw

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 11:24:28