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 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文件

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类型

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/22864.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

项目部署服务器--浏览器拒绝访问问题

一、检查自己的环境 是本地环境、还是虚拟环境 当您使用 Gunicorn 启动 Flask 应用并监听 0.0.0.0:5000 时&#xff0c;您的 Flask 应用已经可以在服务器上运行并通过该端口提供服务了。但是&#xff0c;0.0.0.0 是一个特殊的 IP 地址&#xff0c;它表示“所有可用的网络接口”…

Windows 包管理器 Chocolatey

1、前言 在Windows上做开发&#xff0c;经常会为频繁安装卸载软件而烦恼&#xff0c;着实有点羡慕Linux和macOS上强大的包管理系统。 今天就来解决这个问题。 什么是包管理器? 包管理器是一种自动安装、配置、升级和卸载软件包的工具。它可以解决手动安装软件的诸多痛点: &…

C#WPF数字大屏项目实战03--数据内容区域

1、内容区域划分 第一行标题&#xff0c;放了几个文本框 第二行数据&#xff0c;划分成3列布局 2、第1列布局使用UniformGrid控件 最外面放UniformGrid&#xff0c;然后里面放3个GroupBox控件&#xff0c;这3个groupbox都是垂直排列 3、GroupBox控件模板 页面上的3个Group…

计算机网络 —— 数据链路层(无线局域网)

计算机网络 —— 数据链路层&#xff08;无线局域网&#xff09; 什么是无线局域网IEEE 802.11主要标准及其特点&#xff1a; 802.11的MAC帧样式 我们来看看无线局域网&#xff1a; 什么是无线局域网 无线局域网&#xff08;Wireless Local Area Network&#xff0c;简称WLAN…

Ivy优化算法-2024年7月SCI一区顶刊新算法!公式原理详解与性能测评 Matlab代码免费获取

声明&#xff1a;文章是从本人公众号中复制而来&#xff0c;因此&#xff0c;想最新最快了解各类智能优化算法及其改进的朋友&#xff0c;可关注我的公众号&#xff1a;强盛机器学习&#xff0c;不定期会有很多免费代码分享~ 目录 原理简介 一、初始化 二、协调有序的种群增…

【宠粉赠书】大模型时代的网络安全:安恒“网安三剑客”实战指南

不知不觉中&#xff0c;小智的粉丝已经突破一万。为了回馈粉丝们的厚爱&#xff0c;今天小智给大家送上一套网络安全界的三宝书——安恒"网安三剑客"。下面我会详细给大家介绍这套图书&#xff0c;文末留有领取方式。 随着人工智能&#xff08;AI&#xff09;和大模型…

finalshell刚连上就断,这个参数你注意到了吗

在实际应用中可能一不下心弄错一个参数就会让你的finalshell刚连上就断&#xff0c;如下图所示。 1、进入ssh目录下&#xff0c;修改ssh_config文件 2、修改UseDNS no,并把前面的#去掉。 注&#xff1a;如果在ssh_config文件见不到UseDNS yes ,可以打开sshd_config,他们是在…

Vue 2 + Element UI 选择一个el-select清空另一个el-select选中的值

需求&#xff1a;表单中有两个下拉选择器&#xff0c;先选中第一个&#xff0c;清空第二个选中的值 尝试过this.$refs[form].resetFields(field name);全都失效&#xff01; 效果图如下&#xff1a; 先选择商品分类&#xff0c;再去选择商品列表中的某一件商品 <el-form-…

园区运营管理平台的功能架构

产业园区作为推动地方经济发展的重要载体&#xff0c;其运营管理水平直接影响到园区的竞争力和可持续发展能力&#xff0c;园区运营管理平台作为园区的运营管理工具&#xff0c;旨在通过智能化、自动化的手段提升园区的运营效率和服务水平。 园区运营管理平台不仅为园区管理者提…

SAS:什么时候用kcompress呀?

问题&#xff1a;如何截取ECGTPT变量中的后三个字符&#xff1f; 下图展示了以k开头的以及非k开头的substr函数和length函数&#xff0c;发现在UTF-8编码下&#xff0c;仅以k开头的函数能够截取成功。 释疑&#xff08;以下内容来自SAS Help&#xff09; SAS提供的字符函数…

conflicting types for 错误问题

操作系统真象还原中&#xff0c;第十一章出现的问题&#xff1a; 怎样编译都会出现一个conflicting types for ’xxx‘的错误 出现这个错误的原因&#xff1a; 头文件声明和定义参数稍有不同 头文件中声明 void Hanlder(const char * buf); 在定义时写作 void Hanlder(char…

浏览器工作原理

主要分为导航、获取数据、HTML解析、css解析、执行javaScript、渲染树几个步骤。 1.导航 DNS查询 DNS服务器类似于电话簿&#xff0c;里面包含公共的IP地址以及相关主机名数据库&#xff0c;我们输入一个域名&#xff0c;他能帮我们映射到对应的IP地址。&#xff08;第一次查…

【kubeflow文档】Kubeflow Training Operator

What is Training Operator Training Operator是一个Kubernetes原生项目&#xff0c;用于对使用各种ML框架&#xff08;如PyTorch、TensorFlow、XGBoost等&#xff09;创建的机器学习&#xff08;ML&#xff09;模型进行微调和可扩展的分布式训练。 用户可以将HuggingFace、Dee…

宜选影票api接口如何申请密钥和授权呢?

宜选影票API接口的密钥申请和授权过程一般包括以下步骤&#xff0c;以下将按照清晰的格式分点表示和归纳相关信息&#xff1a; 注册开发者账号&#xff1a; 前往宜选影票的官方网站或开发者平台。注册一个开发者账号&#xff0c;填写必要的个人信息和联系方式。申请API访问权限…

二刷算法训练营Day22 | 二叉树(8/9)

目录 详细布置&#xff1a; 1. 235. 二叉搜索树的最近公共祖先 2. 701. 二叉搜索树中的插入操作 3. 450. 删除二叉搜索树中的节点 详细布置&#xff1a; 1. 235. 二叉搜索树的最近公共祖先 给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共…

用这个AI工具,做公众号爆款图文,5分钟一篇10w+,居然这么简单!(附工具教程)

文章首发于公众号&#xff1a;X小鹿AI副业 大家好&#xff0c;我是程序员X小鹿&#xff0c;前互联网大厂程序员&#xff0c;自由职业2年&#xff0c;也一名 AIGC 爱好者&#xff0c;持续分享更多前沿的「AI 工具」和「AI副业玩法」&#xff0c;欢迎一起交流~ 之前X小鹿一直在各…

mac虚拟光驱工具:Daemon Tools for Mac

Daemon Tools for Mac是一款功能强大的虚拟光驱工具&#xff0c;它为用户提供了在Mac上模拟物理光驱的能力&#xff0c;从而方便用户处理各种光盘映像文件。以下是关于Daemon Tools for Mac的详细介绍&#xff1a; 守护进程工具&#xff1a;Daemon Tools不仅是一个简单的虚拟光…

【讯为Linux驱动开发】2.注册一个字符设备

【问】如何描述一个字符设备&#xff1f; dev结构体 其中需要关心三个成员变量&#xff1a; 所属模块 &#xff1a;struct module *owner; 文件操作结构体&#xff1a; const struct file_operations *ops 设备号 &#xff1a; dev_t 当应用层使用指令open("/dev/hello&…

学生成绩管理系统(大一大作业)

功能 实现添加&#xff0c;排序&#xff0c;修改&#xff0c;保存等功能 库函数 #include<stdio.h> #include<stdlib.h> #include<windows.h> #include<string.h> 头文件 #define functioncreate(major) void major##compare(mana mn){\int i,j,s…

使用Matlab软件绘制函数图像

【实验目的】 1.利用Matlab实现平面上曲线和三维空间中曲线绘制&#xff0c;重点掌握隐函数、极坐标图像绘制的相关命令。 2.利用Matlab实现三维曲面绘制&#xff0c;加深对高等数学课程所学内容的理解 【实验内容与实现】 1、用两种方法绘制下面的曲线图 &#xff08;1&am…