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、自定义信息。

相关推荐
JaguarJack3 小时前
PHP 异常处理全攻略 Try-Catch 从入门到精通完全指南
后端·php
paopaokaka_luck4 小时前
基于SpringBoot+Vue的DIY手工社预约管理系统(Echarts图形化、腾讯地图API)
java·vue.js·人工智能·spring boot·后端·echarts
Victor3564 小时前
Redis(81)Redis的缓存雪崩是什么?
后端
程序员爱钓鱼4 小时前
Python编程实战 · 基础入门篇 | 条件判断 if...else
后端·python
Victor3565 小时前
Redis(80)如何解决Redis的缓存穿透问题?
后端
程序员爱钓鱼5 小时前
Python编程实战 · 基础入门篇 | 循环语句 for / while
后端·python
fox_lht5 小时前
第一章 不可变的变量
开发语言·后端·rust
计算机学姐8 小时前
基于微信小程序的高校班务管理系统【2026最新】
java·vue.js·spring boot·mysql·微信小程序·小程序·mybatis
舒一笑10 小时前
PandaCoder:致敬MyBatis Log Plugin,但我们做得更极致!
后端·程序员·intellij idea