Spring Boot中使用Actuator的/info端点输出Git版本信息
对于Spring Boot的Actuator模块相信大家已经不陌生了,尤其对于其中的/health、/metrics等强大端点已经不陌生(如您还不了解Actuator模块,建议先阅读《Spring Boot Actuator监控端点小结》)。但是,其中还有一个比较特殊的端点/info经常被大家所忽视,因为从最初的理解,它主要用来输出application.properties配置文件中通过info前缀来定义的一些属性,由于乍看之下可能想不到太多应用场景,只是被用来暴露一些应用的基本信息,而基本信息本身也可以在与Spring Cloud结合时作为服务治理的注册信息统一管理,所以这个端点的用处并不是很大。
然而实际上,该端点除了描述应用信息之外,也还可以用来描述Git版本信息,并且整合方法非常简单,下面我们就来看看如何使用/info端点暴露当前应用的Git版本信息。
POM配置
首先,我们可以挑选任意一个Spring Boot项目,修改它的pom.xml。引入spring-boot-starter-actuator,提供/info端点:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
添加git-commit-id-plugin插件,该插件用来产生git的版本信息:
<plugin>
<groupId>pl.project13.maven</groupId>
<artifactId>git-commit-id-plugin</artifactId>
<version>2.1.15</version>
<executions>
<execution>
<goals>
<goal>revision</goal>
</goals>
</execution>
</executions>
<configuration>
<dotGitDirectory>${project.basedir}/.git</dotGitDirectory>
</configuration>
</plugin>
产生git版本信息
在完成了上面的配置之后,执行git-commit-id-plugin插件。
运行完成后,我们可以在控台中看到类似下面的信息:
[INFO] pl.project13.maven.git.log.MavenLoggerBridge - dotGitDirectory E:git_projectoschinaSpringBoot-Learning.git
[INFO] pl.project13.maven.git.log.MavenLoggerBridge - git.build.user.name didi
[INFO] pl.project13.maven.git.log.MavenLoggerBridge - git.build.user.email dyc87112@qq.com
[INFO] pl.project13.maven.git.log.MavenLoggerBridge - git.branch master
[INFO] pl.project13.maven.git.log.MavenLoggerBridge - --always = true
[INFO] pl.project13.maven.git.log.MavenLoggerBridge - --dirty = -dirty
[INFO] pl.project13.maven.git.log.MavenLoggerBridge - --abbrev = 7
[INFO] pl.project13.maven.git.log.MavenLoggerBridge - Tag refs [ [Ref[refs/tags/chapter1=ec8713f61cd49569886708a08adea02c8ef0a112]] ]
[INFO] pl.project13.maven.git.log.MavenLoggerBridge - Created map: [ {} ]
[INFO] pl.project13.maven.git.log.MavenLoggerBridge - HEAD is [ e0540b3524378de9b5d938668a0f75ec016fa5e5 ]
[INFO] pl.project13.maven.git.log.MavenLoggerBridge - Repo is in dirty state [ true ]
[INFO] pl.project13.maven.git.log.MavenLoggerBridge - git.commit.id.describe e0540b3-dirty
[INFO] pl.project13.maven.git.log.MavenLoggerBridge - git.commit.id e0540b3524378de9b5d938668a0f75ec016fa5e5
[INFO] pl.project13.maven.git.log.MavenLoggerBridge - git.commit.id.abbrev e0540b3
[INFO] pl.project13.maven.git.log.MavenLoggerBridge - git.dirty true
...
同时,在target/classes目录下,我们可以发现产生了一个git.properties配置信息。
这个文件就是当前项目的git信息,它的内容如下:
#Generated by Git-Commit-Id-Plugin
#Thu Jun 01 17:57:53 CST 2017
git.build.user.email=dyc87112@qq.com
git.build.host=Lenovo-zhaiyc
git.dirty=true
git.remote.origin.url=https://git.oschina.net/didispace/SpringBoot-Learning.git
git.closest.tag.name=chapter1
git.commit.id.describe-short=e0540b3-dirty
git.commit.user.email=dyc87112@qq.com
git.commit.time=2017-06-01T17:57:10+0800
git.commit.message.full=update
git.build.version=1.0.0
git.commit.message.short=update
git.commit.id.abbrev=e0540b3
git.branch=master
git.build.user.name=didi
git.closest.tag.commit.count=240
git.commit.id.describe=e0540b3-dirty
git.commit.id=e0540b3524378de9b5d938668a0f75ec016fa5e5
git.tags=
git.build.time=2017-06-01T17:57:53+0800
git.commit.user.name=didi
启动测试
完成了上述配置之后,启动应用并访问端点,比如:curl localhost:8080/info,我们可以获得如下输出:
{
"git": {
"commit": {
"time": 1496311030000,
"id": "e0540b3"
},
"branch": "master"
}
}
其中包含了关于branch和commit的基础信息。而这个信息格式是最简模式,我们也可以通过配置下面的参数来获取更全面的git信息:
management.info.git.mode=full
重启应用后再访问/info端点,可以获得类似下面更为详细的版本信息了。
{
"git": {
"build": {
"host": "Lenovo-zhaiyc",
"version": "1.0.0",
"time": 1496311073000,
"user": {
"name": "didi",
"email": "dyc87112@qq.com"
}
},
"branch": "master",
"commit": {
"message": {
"short": "update",
"full": "update"
},
"id": "e0540b3524378de9b5d938668a0f75ec016fa5e5",
"id.describe-short": "e0540b3-dirty",
"id.abbrev": "e0540b3",
"id.describe": "e0540b3-dirty",
"time": 1496311030000,
"user": {
"email": "dyc87112@qq.com",
"name": "didi"
}
},
"closest": {
"tag": {
"name": "chapter1",
"commit": {
"count": "240"
}
}
},
"dirty": "true",
"remote": {
"origin": {
"url": "https://git.oschina.net/didispace/SpringBoot-Learning.git"
}
},
"tags": ""
}
}
- 再议-Golang语言MessageBox用法实例
- linux下通过go语言获得系统进程cpu使用情况的方法
- Golang语言版ssh口令破解工具 --必须亲自敲代码,否则看了白看
- MySQL中insert语句没有响应的问题分析(r11笔记第21天)
- MySQL级联复制中的数据同步(第二篇)(r11笔记第21天)
- Golang语言 - 以任意类型的slices作为输入参数
- HDUOJ-------The Hardest Problem Ever
- Golang语言--【社区推荐阅读】 fmt用法
- 一个SQL性能问题的优化探索(一)(r11笔记第33天)
- HDUOJ-----1074 Integer Inquiry
- PXE无人值守安装Linux
- HDUOJ-----Robot Motion
- 对康托展开的一些心得...
- MySQL 5.7 General Tablespace学习(r11笔记第34天)
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- Nginx技术总结之二——Nginx进程模型
- 「PostgreSQL技巧」Citus实时执行程序如何并行化查询
- Nginx技术总结之四——集群和负载均衡的算法与实现
- SQL 找出 100 以内的质数
- SQL 获取最长的日期序列
- Lucene基本知识入门
- LeetCode 35. 搜索插入位置
- 【面试系列】反射+动态代理,你为何老是搞不懂?
- 我不知道还可以用 JS 做的 6 件事
- 【服务网格架构】Envoy架构概览(7):断路,全局限速和TLS
- 你的消息队列如何保证消息不丢失,且只被消费一次,这篇就教会你
- 【服务网格架构】Envoy架构概览(9):访问日志,MongoDB,DynamoDB,Redis
- Redis Cluster 原理分析
- Ceph介绍及原理架构分享
- 分布式存储Ceph之PG状态详解