Spring Boot Actuator应用信息Application Information全解析
Spring Boot Actuator 的 “应用信息”(Application Information) 功能,对应的是 /actuator/info 这个端点。
它和 /actuator/health 不同:
health关注 系统是否正常运行(运行时状态)info关注 应用本身的信息(构建、版本、配置等静态元数据)
🎯 一、核心目标:让外部系统了解你的应用“是谁”
想象一下,你在运维一个微服务集群:
- 你想知道每个服务的:
- 是哪个 Git 分支构建的?
- 构建时间是什么时候?
- 使用的 Java 版本?
- 项目版本号?
这些信息对排查问题、发布管理、审计都非常重要。
而 /actuator/info 就是用来暴露这些静态元信息的统一入口。
🔌 二、/actuator/info 返回什么?
默认情况下,它返回一个 JSON 对象,包含各种关于应用的信息,例如:
{"app": {"encoding": "UTF-8","java": {"source": "17","target": "17"}},"git": {"branch": "main","commit": {"id": "a1b2c3d","time": "2025-04-05T10:20:30Z"}},"build": {"artifact": "myapp","name": "My Application","time": "2025-04-05T10:15:00Z","version": "1.0.0"},"example": {"key": "value"}
}
这些数据来自不同的 InfoContributor 组件。
🧩 三、什么是 InfoContributor?
Spring Boot 使用 策略模式 来收集信息:
所有实现
InfoContributor接口的 Bean 都可以向/actuator/info贡献一部分信息。
你可以把它理解为:“信息贡献者”,每个人负责提供一块内容。
✅ 四、Spring Boot 自带的 InfoContributors
| 贡献者 | 作用 | 如何启用 |
|---|---|---|
EnvironmentInfoContributor | 暴露 info.* 开头的配置项 | 默认开启 |
GitInfoContributor | 暴露 Git 提交信息(分支、commit ID 等) | 需要 git.properties 文件 |
BuildInfoContributor | 暴露构建信息(项目名、版本、时间等) | 需要 build-info.properties 文件 |
🛠️ 五、如何配置这些信息?(实战示例)
1️⃣ 自定义 info 属性(最简单方式)
在 application.yml 或 application.properties 中添加 info.*:
# application.properties
info.app.name=用户服务
info.app.description=处理用户注册与登录
info.app.encoding=UTF-8
info.app.java.source=17
info.app.java.target=17
或者用 YAML:
info:app:name: 用户服务description: 处理用户注册与登录encoding: UTF-8java:source: 17target: 17
✅ 效果:访问 /actuator/info 会看到:
{"app": {"name": "用户服务","description": "处理用户注册与登录","encoding": "UTF-8","java": {"source": "17","target": "17"}}
}
2️⃣ 使用 Maven 动态填充版本信息(推荐)
不要硬编码版本号,而是从 Maven 的 pom.xml 中读取。
步骤一:在 pom.xml 中启用资源过滤
<build><resources><resource><directory>src/main/resources</directory><filtering>true</filtering></resource></resources>
</build>
步骤二:修改 application.properties
info.app.version=@project.version@
info.app.name=@project.name@
info.app.encoding=@project.build.sourceEncoding@
info.app.java.version=@java.version@
Maven 构建时会自动替换
@xxx@为实际值。
3️⃣ 添加 Git 提交信息
让你知道这个 jar 包是基于哪个 Git commit 构建的。
步骤一:添加 Maven 插件(生成 git.properties)
<plugin><groupId>pl.project13.maven</groupId><artifactId>git-commit-id-plugin</artifactId>
</plugin>
Gradle 用户可用:
plugins {id 'com.gorylenko.gradle-git-properties' version '2.4.1'
}
步骤二:构建后会生成 git.properties 文件
位置:target/classes/git.properties
内容示例:
git.branch=main
git.commit.id=abc123def
git.commit.time=2025-04-05T10:20:30Z
步骤三:配置是否显示完整信息
management:info:git:enabled: true # 是否启用 Git 信息(默认 true)mode: full # full=全部显示;simple=只显示 id 和 time
4️⃣ 添加构建信息(项目名、版本、时间)
Maven 和 Gradle 都能生成 META-INF/build-info.properties。
Maven 配置:
<plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><excludeArtifactIds>some-artifact</excludeArtifactIds></configuration><executions><execution><goals><goal>build-info</goal></goals></execution></executions>
</plugin>
Gradle 配置:
bootBuildInfo {additionalProperties = ['encoding': 'UTF-8']
}
构建后生成:
META-INF/build-info.properties
内容:
build.artifact=myapp
build.group=com.example
build.name=My Application
build.time=2025-04-05T10:15:00Z
build.version=1.0.0
✅ 自动出现在 /actuator/info 中。
🧪 六、自定义 InfoContributor(高级用法)
如果你想暴露一些特殊信息,比如:
- 当前服务器 IP
- 许可证信息
- 第三方服务连接状态(非健康检查)
你可以写一个自己的 InfoContributor。
示例:添加一个自定义字段
@Component
public class ExampleInfoContributor implements InfoContributor {@Overridepublic void contribute(Info.Builder builder) {builder.withDetail("example", Collections.singletonMap("key", "value"));}
}
访问 /actuator/info 会多出:
{"example": {"key": "value"}
}
更复杂的例子:加入当前时间
@Component
public class BuildTimeInfoContributor implements InfoContributor {@Overridepublic void contribute(Info.Builder builder) {builder.withDetail("build", Map.of("timestamp", Instant.now(),"environment", System.getenv("ENV")));}
}
输出:
{"build": {"timestamp": "2025-04-05T10:25:00Z","environment": "prod"}
}
⚙️ 七、全局开关控制
你可以一键关闭所有默认的 info 数据源:
management:info:defaults:enabled: false # 关闭所有默认 InfoContributor
然后只开启你需要的:
management:info:git:enabled: truebuild:enabled: false
📊 总结:一张表看懂 /actuator/info
| 功能 | 实现方式 | 是否推荐使用 |
|---|---|---|
| 显示项目版本、名称 | build-info.properties + Maven/Gradle 插件 | ✅ 强烈推荐 |
| 显示 Git 分支、commit ID | git.properties + git 插件 | ✅ 强烈推荐(便于追踪) |
| 显示编译参数、编码等 | info.* in properties/yml | ✅ 推荐 |
| 显示自定义信息 | 实现 InfoContributor 接口 | ✅ 按需使用 |
| 显示构建时间 | build-info 自动生成 | ✅ 推荐 |
💡 实际应用场景
| 场景 | 如何利用 /actuator/info |
|---|---|
| 发布回滚 | 查看线上服务的 git.commit.id 是否正确 |
| 故障排查 | 确认各实例是否使用相同版本 |
| 审计合规 | 暴露许可证、构建者、构建时间 |
| CI/CD 集成 | 自动采集部署包元数据 |
| 监控平台展示 | 在 Grafana 中显示服务版本信息 |
✅ 最佳实践建议
- 一定要开启
build-info和git-info - 使用 Maven/Gradle 变量动态填充版本号
- 避免在
info中放敏感信息(如密码、密钥) - 可以用
InfoContributor加入环境标识(dev/test/prod) - 结合 CI 流水线,确保每次构建都生成最新信息
如果你需要,我可以给你一个完整的 pom.xml + application.yml 示例,展示如何一次性配置好 Git、Build、自定义信息。
