Spring Boot Actuator应用信息Application Information全解析

Spring Boot Actuator 的 "应用信息"(Application Information) 功能,对应的是 /actuator/info 这个端点。

它和 /actuator/health 不同:

  • health 关注 系统是否正常运行(运行时状态)
  • info 关注 应用本身的信息(构建、版本、配置等静态元数据)

🎯 一、核心目标:让外部系统了解你的应用"是谁"

想象一下,你在运维一个微服务集群:

  • 你想知道每个服务的:
    • 是哪个 Git 分支构建的?
    • 构建时间是什么时候?
    • 使用的 Java 版本?
    • 项目版本号?

这些信息对排查问题、发布管理、审计都非常重要。

/actuator/info 就是用来暴露这些静态元信息的统一入口。


🔌 二、/actuator/info 返回什么?

默认情况下,它返回一个 JSON 对象,包含各种关于应用的信息,例如:

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.ymlapplication.properties 中添加 info.*

properties 复制代码
# application.properties
info.app.name=用户服务
info.app.description=处理用户注册与登录
info.app.encoding=UTF-8
info.app.java.source=17
info.app.java.target=17

或者用 YAML:

yaml 复制代码
info:
  app:
    name: 用户服务
    description: 处理用户注册与登录
    encoding: UTF-8
    java:
      source: 17
      target: 17

✅ 效果:访问 /actuator/info 会看到:

json 复制代码
{
  "app": {
    "name": "用户服务",
    "description": "处理用户注册与登录",
    "encoding": "UTF-8",
    "java": {
      "source": "17",
      "target": "17"
    }
  }
}

2️⃣ 使用 Maven 动态填充版本信息(推荐)

不要硬编码版本号,而是从 Maven 的 pom.xml 中读取。

步骤一:在 pom.xml 中启用资源过滤
xml 复制代码
<build>
  <resources>
    <resource>
      <directory>src/main/resources</directory>
      <filtering>true</filtering>
    </resource>
  </resources>
</build>
步骤二:修改 application.properties
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
xml 复制代码
<plugin>
  <groupId>pl.project13.maven</groupId>
  <artifactId>git-commit-id-plugin</artifactId>
</plugin>

Gradle 用户可用:

gradle 复制代码
plugins {
  id 'com.gorylenko.gradle-git-properties' version '2.4.1'
}
步骤二:构建后会生成 git.properties 文件

位置:target/classes/git.properties

内容示例:

properties 复制代码
git.branch=main
git.commit.id=abc123def
git.commit.time=2025-04-05T10:20:30Z
步骤三:配置是否显示完整信息
yaml 复制代码
management:
  info:
    git:
      enabled: true          # 是否启用 Git 信息(默认 true)
      mode: full             # full=全部显示;simple=只显示 id 和 time

4️⃣ 添加构建信息(项目名、版本、时间)

Maven 和 Gradle 都能生成 META-INF/build-info.properties

Maven 配置:
xml 复制代码
<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 配置:
gradle 复制代码
bootBuildInfo {
  additionalProperties = ['encoding': 'UTF-8']
}

构建后生成:

复制代码
META-INF/build-info.properties

内容:

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

示例:添加一个自定义字段

java 复制代码
@Component
public class ExampleInfoContributor implements InfoContributor {

    @Override
    public void contribute(Info.Builder builder) {
        builder.withDetail("example", 
            Collections.singletonMap("key", "value"));
    }
}

访问 /actuator/info 会多出:

json 复制代码
{
  "example": {
    "key": "value"
  }
}

更复杂的例子:加入当前时间

java 复制代码
@Component
public class BuildTimeInfoContributor implements InfoContributor {

    @Override
    public void contribute(Info.Builder builder) {
        builder.withDetail("build", Map.of(
            "timestamp", Instant.now(),
            "environment", System.getenv("ENV")
        ));
    }
}

输出:

json 复制代码
{
  "build": {
    "timestamp": "2025-04-05T10:25:00Z",
    "environment": "prod"
  }
}

⚙️ 七、全局开关控制

你可以一键关闭所有默认的 info 数据源:

yaml 复制代码
management:
  info:
    defaults:
      enabled: false   # 关闭所有默认 InfoContributor

然后只开启你需要的:

yaml 复制代码
management:
  info:
    git:
      enabled: true
    build:
      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 中显示服务版本信息

✅ 最佳实践建议

  1. 一定要开启 build-infogit-info
  2. 使用 Maven/Gradle 变量动态填充版本号
  3. 避免在 info 中放敏感信息(如密码、密钥)
  4. 可以用 InfoContributor 加入环境标识(dev/test/prod)
  5. 结合 CI 流水线,确保每次构建都生成最新信息

如果你需要,我可以给你一个完整的 pom.xml + application.yml 示例,展示如何一次性配置好 Git、Build、自定义信息。

相关推荐
程序员海军12 分钟前
一个 AI 应用开发程序员的一天,都在屏幕前忙些什么?
前端·后端·程序员
乐观的Terry17 分钟前
8、发布系统-完整流水线的核心
java·spring boot·spring·spring cloud
不能放弃治疗21 分钟前
MCP
后端
万亿少女的梦16840 分钟前
基于Spring Boot的游戏交易管理系统设计与实现
java·spring boot·mysql·系统设计·交易管理
.柒宇.1 小时前
Elasticsearch 核心概念与系统架构详解
elasticsearch·系统架构
江湖十年1 小时前
Go 语言中 YAML to JSON 踩坑笔记
后端·go·json
你驴我2 小时前
WhatsApp 消息撤回与编辑的幂等性设计实践
java·服务器·前端·后端·python
一缕清烟在人间2 小时前
HarmonyOS开发实战:小分享-TextEditPage文字编辑器——Header+TextArea+工具栏
后端·华为·harmonyos·鸿蒙
人间凡尔赛2 小时前
K8s 十年之变:从 Cloud Native 到 AI Native,2026 年后端架构的范式革命
后端·云原生·架构
程序员cxuan2 小时前
Opus 5 深夜炸场,价格还挺香。。。
人工智能·后端·程序员