Spring Boot的Actuator模块通常被用来做健康检查和指标监控,但Info端点的价值往往被低估。它本质上是一个运行实例的元数据聚合器,能够在统一接口中呈现应用版本、构建时间、Git提交ID、部署环境以及业务自定义字段。要把Info端点用起来,不需要从零实现HTTP接口,而是围绕InfoContributor扩展点把零散信息组织成Map结构,Actuator会自动完成聚合和JSON输出。

先看执行链路。当请求访问/actuator/info时,Spring Boot会根据当前应用上下文收集所有类型为InfoContributor的Bean,并逐个调用它们的contribute方法。每个Contributor向同一个Info.Builder写入键值数据,最终由InfoEndpoint生成完整的Info对象。这种设计的好处是扩展点非常清晰:新增一类信息就新增一个Contributor,不会侵入现有逻辑。
一、引入Actuator并启用Info端点
要让Info端点对外提供服务,首先需要在Maven项目中引入spring-boot-starter-actuator依赖。这个依赖会带上InfoEndpoint及相关自动配置类,但出于安全考虑,Spring Boot默认只暴露health端点。因此接下来必须修改application.yml或application.properties,将info加入暴露列表。注意management.endpoints.web.exposure.include的配置方式,如果只写info,就不会把其他端点无谓暴露出去。
最小配置如下。这里同时展示了pom.xml和application.yml的关键片段。pom.xml中不需要额外配置执行goal,仅引入starter即可让info端点具备空JSON返回能力,后续再补充数据源。
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency>
management:
endpoints:
web:
exposure:
include: info
endpoint:
info:
enabled: true
访问/actuator/info时,如果一切正常会得到一个空的JSON对象。这个空对象并不意味着没有信息,而是因为当前还没有任何InfoContributor写入数据。下一节会从构建元数据开始填充。
二、自动生成构建信息与Git元数据
在日常发布中,最常需要确认的两类信息是Maven构建坐标和Git提交记录。这两类信息都可以通过插件在打包阶段生成属性文件,再由Spring Boot自动识别并暴露到Info端点。构建信息依赖spring-boot-maven-plugin的build-info目标,它会生成META-INF/build-info.properties,包含artifact、version、time等字段;Git信息则使用git-commit-id-maven-plugin生成git.properties。
需要注意的是,插件生成的属性文件必须放在META-INF目录下,因为Spring Boot会从classpath中扫描这些固定路径。配置build-info时,可以在spring-boot-maven-plugin的executions中声明目标;配置git-commit-id时,需要指定生成文件位置为META-INF/git.properties。两个插件可以共存,无需额外Java代码。
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>build-info</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>io.github.git-commit-id</groupId>
<artifactId>git-commit-id-maven-plugin</artifactId>
<configuration>
<generateGitPropertiesFile>true</generateGitPropertiesFile>
<generateGitPropertiesFilename>${project.build.outputDirectory}/META-INF/git.properties</generateGitPropertiesFilename>
</configuration>
</plugin>
</plugins>
</build>
重新执行mvn package后,再访问Info端点,可以看到类似下面的返回结构。其中build和git节点并非手动编码,而是由Spring Boot内置的InfoPropertiesInfoContributor根据属性文件自动填充。字段名与属性文件中的键一一对应。
{
"build": {
"artifact": "order-service",
"version": "1.4.2",
"time": "2025-03-18T10:20:30Z"
},
"git": {
"branch": "main",
"commitId": "7f3b2a9",
"commitTime": "2025-03-18T09:50:00Z"
}
}
如果项目使用Gradle,也有对应的gradle插件可以生成相同格式的属性文件,核心思路不变。需要特别留意的是,生成的构建时间和Git时间属于客观元数据,但如果应用按时间判断缓存策略,这些时间字段可能会随构建变化,不要将它们误认为应用启动时间。
三、自定义InfoContributor与合并规则
构建信息和Git内容足够用来回答版本问题,但生产环境还经常需要暴露部署区域、运维联系人、启用的功能开关等业务数据。这些信息可以写在配置文件中,也可以直接交给自定义InfoContributor在运行时动态获取。自定义Contributor只需要实现InfoContributor接口,在contribute方法中调用Info.Builder的withDetail写入键值数据。
一个常见的做法是注入Environment或业务配置Bean,把与部署相关的信息拼装成Map后一次性写入。下面的示例展示了如何读取当前激活的profile、部署区域和负责人信息,并组织到Info端点中。代码中用LinkedHashMap保证字段输出顺序,便于阅读。
import java.util.LinkedHashMap;
import java.util.Map;
import org.springframework.boot.actuate.info.Info;
import org.springframework.boot.actuate.info.InfoContributor;
import org.springframework.core.env.Environment;
import org.springframework.stereotype.Component;
@Component
public class DeploymentInfoContributor implements InfoContributor {
private final Environment environment;
public DeploymentInfoContributor(Environment environment) {
this.environment = environment;
}
@Override
public void contribute(Info.Builder builder) {
Map<String, Object> deployment = new LinkedHashMap<>();
deployment.put("region", environment.getProperty("deploy.region", "default"));
deployment.put("profile", String.join(",", environment.getActiveProfiles()));
builder.withDetail("deployment", deployment);
builder.withDetail("owner", "platform-team");
}
}
当多个InfoContributor同时存在时,它们会按照Spring Bean的Order顺序依次执行。如果两个Contributor写入了相同的键,后执行的会覆盖先执行的值。需要固定输出优先级时,可以在类上添加@Order注解,例如@Order(10)表示较早执行,@Order(20)较晚执行,数字越大越后执行。对于同名的扁平键或嵌套Map键,覆盖行为一致。
此外,Info端点可以结合配置实现条件化数据输出。对于不想对外公开的字段,可以不在Contributor中写入,或者使用@ConditionalOnProperty控制整个Contributor是否注册。某些自动收集的env信息默认关闭,如果确实需要,可以通过management.info.env.enabled=true开启,但务必评估敏感环境变量泄露风险。
最后总结一下,Spring Boot的Info端点通过InfoContributor机制把构建、Git和业务元数据统一到一处,非常适合发布核验和运维排查。只要配置好插件和自定义Contributor,就能获得一个稳定、易扩展的应用信息面板。实际使用中建议把Info端点与安全框架配合,限制访问来源,避免将内部拓扑信息暴露到公网。
Spring Boot InfoInfoContributorActuator端点修改时间:2026-09-22 22:50:18