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

Spring Actuator构建信息本地测试获取及来源问题咨询

Spring Actuator /info端点构建信息相关问题解答

问题1:无需提供META-INF/build-info.properties文件,如何在本地单元测试中获取构建信息?

这里有几种实用方案:

  • 借助Spring Boot构建插件临时生成
    不管用Maven还是Gradle,都可以在测试阶段执行插件的buildInfo任务,临时生成构建信息文件到测试类路径。比如Maven可以在pom.xml里把spring-boot:build-info绑定到test-compile阶段,或者直接在命令行执行mvn spring-boot:build-info test;Gradle则可以运行./gradlew buildInfo test。这样测试时Actuator就能自动读取到构建信息。

  • 手动模拟BuildProperties Bean
    在测试配置中创建自定义的BuildProperties实例并注入容器,Actuator的BuildInfoContributor会自动读取这个Bean的数据。示例代码:

@TestConfiguration
public class TestBuildConfig {
    @Bean
    public BuildProperties buildProperties() {
        Map<String, Object> buildData = new HashMap<>();
        buildData.put("group", "com.yourcompany");
        buildData.put("artifact", "your-project");
        buildData.put("version", "1.0.0-SNAPSHOT");
        buildData.put("time", LocalDateTime.now().format(DateTimeFormatter.ISO_DATE_TIME));
        return new BuildProperties(buildData);
    }
}

在测试类上通过@Import(TestBuildConfig.class)引入这个配置即可。

  • 自定义测试环境的Info贡献者
    创建一个仅在测试环境生效的InfoContributor,手动添加build块信息,不需要依赖BuildProperties。示例:
@Component
@Profile("test")
public class TestBuildInfoContributor implements InfoContributor {
    @Override
    public void contribute(Info.Builder builder) {
        builder.withDetail("build", Map.of(
            "version", "1.0.0-SNAPSHOT",
            "artifact", "your-project",
            "group", "com.yourcompany",
            "time", LocalDateTime.now()
        ));
    }
}

问题2:项目无META-INF/build-info.properties文件时,Spring Actuator从何处获取构建信息?

Spring Actuator的BuildInfoContributor获取构建信息的唯一来源是Spring容器中的BuildProperties Bean,而BuildProperties的数据来源只有两种:

  1. META-INF/build-info.properties文件:这是默认途径,由Spring Boot Maven/Gradle插件在构建过程中自动生成。如果生产环境能看到build块,大概率是构建流程(比如CI/CD或者本地打包)中自动执行了插件的buildInfo任务,生成了该文件并打包进了最终的应用包,只是你没手动维护这个文件而已。
  2. 手动注入的BuildProperties实例:如果项目中没有生成上述文件,但你自己定义了BuildProperties Bean并交给Spring管理,Actuator也会读取这个Bean的信息展示在/info端点。

如果以上两种情况都不满足,/info端点就不会出现build块,这也是你单元测试中缺失该块的原因。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 16:45:53