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的数据来源只有两种:
- META-INF/build-info.properties文件:这是默认途径,由Spring Boot Maven/Gradle插件在构建过程中自动生成。如果生产环境能看到build块,大概率是构建流程(比如CI/CD或者本地打包)中自动执行了插件的
buildInfo任务,生成了该文件并打包进了最终的应用包,只是你没手动维护这个文件而已。 - 手动注入的BuildProperties实例:如果项目中没有生成上述文件,但你自己定义了
BuildPropertiesBean并交给Spring管理,Actuator也会读取这个Bean的信息展示在/info端点。
如果以上两种情况都不满足,/info端点就不会出现build块,这也是你单元测试中缺失该块的原因。
内容的提问来源于stack exchange,提问作者user19176259
相关产品推荐
相关产品推荐

