当前位置: 首页 > news >正文

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

http://www.dtcms.com/a/519489.html

相关文章:

  • 怎么给我 的网站做关键词南昌seo网站建设
  • [linux仓库]信号处理[进程信号·伍]
  • 从零掌握 Pandas:数据分析的黄金钥匙|01:认识Pandas
  • 网站建设和技术服务合同范本推广方式有哪些?
  • 在百度上做公司网站得多少钱网站怎么建设微信支付宝支付功能
  • 西安做网站天猫优惠券网站怎么做的
  • 开源 Linux 服务器与中间件(十一)Emqx服务器消息的订阅和发送(mqtt测试)
  • express中间件(java拦截器)
  • [人工智能-大模型-57]:模型层技术 - 软件开发的不同层面(如底层系统、中间件、应用层等),算法的类型、设计目标和实现方式存在显著差异。
  • RHEL_2_部署 chrony服务器
  • 视频分析软件机动车识别
  • 中间件面试题
  • 中间件实现任务去重与精细化分发:设计模式与常见陷阱
  • (补)CNN 模型搭建与训练:PyTorch 实战 CIFAR10 任务的应用
  • spring篇:一文读懂spring:工作原理之核心技术解析
  • docker 原理
  • 龙岩网站开发较好的公司王战山
  • vllm论文中figure3每个块的区别
  • 西安营销网站建设公司厦门建设局官网
  • 机器视觉的锂电池叠片应用
  • Rhino(犀牛)转换为 3DXML 全指南:迪威模型网在线实操 + 本地方案
  • react报错Cannot find module ‘ajv/dist/compile/codegen‘
  • uv如何配置阿里云源在 pyproject.toml 中 或在 uv.toml 中
  • 【算法】排序算法汇总1
  • 学习笔记 | 图论基础
  • 苏州要服务网站建设视频网站建设多少钱
  • Flink 使用 RocksDB 作为状态后端存储的原因详解
  • 历经一载编程路,褪去青涩踏新程
  • 面试随想录4:吉贝克后端
  • 使用Python操作你的手机(Appium入门)