SpringBoot: 读取项目的Git版本号

在开发项目的时候,我们经常会想要拿到线上运行的程序版本,以确定程序是否正确发布。Spring Boot提供了这样的能力支持。这个能力的核心组件是3个:

  1. Maven插件git-commit-id-maven-plugin,用于生成.properties文件,里边包含git的各种信息
  2. 加载git.properties文件,ProjectInfoAutoConfiguration判断是否存在git的properties文件,注册GitProperties Bean
  3. 引用GitProperties Bean,读取git信息

1. 使用Maven插件

首先我们需要在pom.xml里引入插件,在build/plugins/plugin配置插件git-commit-id-maven-plugin的

XML 复制代码
<?xml version="1.0" encoding="UTF-8"?>

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">


    ...
    <build>
        <plugins>
            <plugin>
                <groupId>io.github.git-commit-id</groupId>
                <artifactId>git-commit-id-maven-plugin</artifactId>
                <configuration>
                    <generateGitPropertiesFile>true</generateGitPropertiesFile>
                    <generateGitPropertiesFilename>
                        ${project.build.outputDirectory}/git.properties
                    </generateGitPropertiesFilename>
                </configuration>
            </plugin>
            ...
        </plugins>
    </build>

</project>

执行插件git-commit-id:revision,查看生成的target,最终会在class目录下创建一个git.properties文件

bash 复制代码
mvn clean package git-commit-id:revision

看一下生成的git.properties文件,可以看到,里边不仅有版本号(commit.id),还有分支(git.branch),用户名(user.name)等信息

2. 加载git.properties文件

SpringBoot定义了一个AutoConfiguration类(ProjectInfoAutoConfiguration),基于条件创建GitProperties对象。

1. 条件对象

GitResourceAvailableCondition通过环境变量spring.info.git.location获取git.proerties文件的路径。如果没有设置环境变量则直接查看classpath:git.properties。

获取配置文件的路径后,通过ResourceLoader#getResource(location)判断这个文件是否存在。

2. 创建Bean

ProjectInfoAutoConfiguration是一个AutoConfiguration类,定义了一个@Bean方法,创建一个GitProperties Bean。后续只需要引用这个Bean即可。

3. 引用GitProperties Bean

在我们的业务代码中只需要直接注入GitProperties Bean即可,GitProperties有5个核心方法:

  1. getBranch,获取分支
  2. getCommitId,获取提交版本号
  3. getShortCommitId,获取短的提交版本号
  4. get,按属性名读取git.properties文件,返回String类型
  5. getInstant,按属性名读取git.properties文件,返回Instant类型
相关推荐
vx-Biye_Design1 小时前
SSM伴侣动物伴护星小程序06330-计算机课程设计、毕业设计
spring boot·后端·elasticsearch·小程序·架构·课程设计·idea
云泽8085 小时前
Git 版本控制系统(下):从 .git 目录结构到冲突解决机制详解
大数据·git·elasticsearch
前端精髓8 小时前
NestJS 是什么(对着 Spring Boot 一起学习)
spring boot·后端·学习
武哥聊编程10 小时前
【AI实战项目】基于SpringAI+Springboot+Vue的AI面试刷题训练平台
vue.js·人工智能·spring boot·springai
vipxieliang11 小时前
固定电话验证详解:区号、号码、分机号的完整验证
java·spring boot
步行cgn11 小时前
Spring Boot 主入口类上的 @Enable 和 @Scan 注解详解
java·spring boot·后端
麻辣布丁11 小时前
Git冲突原因与解决方法全解
大数据·git·elasticsearch
xixingzhe212 小时前
SpringBoot DDD 实战入门文档
spring boot·spring·ddd
杨运交14 小时前
[069][公共模块]Spring Boot 全局异常处理与参数校验实战(下):校验异常精细化处理与 WebFlux 适配
java·spring boot·后端
行者-全栈开发14 小时前
Spring Boot + FFmpeg 视频批量处理实战:压缩、HLS切片与异步任务引擎
spring boot·ffmpeg·异步处理·视频压缩·hls切片·批量任务·redis队列