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

SpringBoot 启动输出 Git 版本信息(2023/07/11)

SpringBoot 启动输出 Git 版本信息

文章目录

  • SpringBoot 启动输出 Git 版本信息
    • 1. 环境依赖
    • 2. pom.xml 配置
    • 3. 启动类配置

为了方便记录项目打包时的 Git 版本,本文将介绍如何将 Git 版本信息打包进 JAR 文件,并在项目启动时输出。

1. 环境依赖

  • SpringBoot 2.7.13;
  • git-commit-id-maven-plugin 4.9.9;

2. pom.xml 配置

<build><plugins><plugin><groupId>io.github.git-commit-id</groupId><artifactId>git-commit-id-maven-plugin</artifactId><version>4.9.9</version><executions><execution><id>get-the-git-infos</id><goals><goal>revision</goal></goals><phase>initialize</phase></execution></executions><configuration><injectAllReactorProjects>false</injectAllReactorProjects><verbose>true</verbose><skipPoms>true</skipPoms><generateGitPropertiesFile>true</generateGitPropertiesFile><generateGitPropertiesFilename>${project.build.outputDirectory}/git.properties</generateGitPropertiesFilename><generateGitPropertiesFileWithEscapedUnicode>false</generateGitPropertiesFileWithEscapedUnicode><dotGitDirectory>${project.basedir}/.git</dotGitDirectory><format>properties</format><prefix>git</prefix><dateFormat>yyyy-MM-dd HH:mm:ss</dateFormat><dateFormatTimeZone>${user.timezone}</dateFormatTimeZone><failOnNoGitDirectory>false</failOnNoGitDirectory><failOnUnableToExtractRepoInfo>false</failOnUnableToExtractRepoInfo><useNativeGit>false</useNativeGit><skip>false</skip><runOnlyOnce>false</runOnlyOnce><commitIdGenerationMode>full</commitIdGenerationMode><evaluateOnCommit>HEAD</evaluateOnCommit><useBranchNameFromBuildEnvironment>true</useBranchNameFromBuildEnvironment><injectIntoSysProperties>true</injectIntoSysProperties><offline>true</offline></configuration></plugin></plugins>
</build>

3. 启动类配置

package com.xiaoqqya.gitinfo;import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.NoSuchBeanDefinitionException;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.info.GitProperties;
import org.springframework.context.ConfigurableApplicationContext;/*** Spring boot git info demo.** @author <a href="mailto:xiaoQQya@126.com>xiaoQQya</a>* @since 2023/07/11*/
@SpringBootApplication
public class GitInfoApplication {private static final Logger LOGGER = LoggerFactory.getLogger(GitInfoApplication.class);public static void main(String[] args) {ConfigurableApplicationContext context = SpringApplication.run(GitInfoApplication.class, args);printGitInfo(context);}/*** 输出 Git 版本控制信息.** @param context SpringBoot 上下文信息*/private static void printGitInfo(ConfigurableApplicationContext context) {try {if (LOGGER.isInfoEnabled()) {GitProperties gitProperties = context.getBean(GitProperties.class);LOGGER.info("Git branch: {}", gitProperties.get("branch"));LOGGER.info("Git build time: {}", gitProperties.get("build.time"));LOGGER.info("Git commit id: {}", gitProperties.get("commit.id.full"));LOGGER.info("Git commit user: {}", gitProperties.get("commit.user.name") + "<" + gitProperties.get("commit.user.email") + ">");LOGGER.info("Git commit time: {}", gitProperties.get("commit.time"));LOGGER.info("Git commit message: {}", gitProperties.get("commit.message.full"));}} catch (NoSuchBeanDefinitionException e) {LOGGER.warn(e.getMessage());}}
}

参考文章:

  • git-commit-id/git-commit-id-maven-plugin (github.com);
  • Injecting Git Information Into Spring Beans | Baeldung;
  • springboot获取项目git版本信息的几种方式_gitproperties_sky~hello的博客-CSDN博客;

相关文章:

SpringBoot 启动输出 Git 版本信息(2023/07/11)

SpringBoot 启动输出 Git 版本信息 文章目录 SpringBoot 启动输出 Git 版本信息1. 环境依赖2. pom.xml 配置3. 启动类配置 为了方便记录项目打包时的 Git 版本&#xff0c;本文将介绍如何将 Git 版本信息打包进 JAR 文件&#xff0c;并在项目启动时输出。 1. 环境依赖 SpringB…...

SSH客户端连接远程服务器

目录 一、什么是客户端连接远程服务器 二、什么是服务端连接远程服务器 三、查看网络信息 1、图形程序查看网络信息 2、命令查看网络信息 四、SSH客户端&#xff08;Linux&#xff09; 五、SSH客户端&#xff08;windows&#xff09; 六、SSH远程服务器 一、什么是客户…...

“深入理解Redis:高性能缓存与数据存储的秘密“

标题&#xff1a;深入理解Redis&#xff1a;高性能缓存与数据存储的秘密 在现代应用程序的开发中&#xff0c;缓存和数据存储是非常重要的组成部分。它们不仅可以提高应用程序的性能&#xff0c;还可以减轻数据库和网络的负载。其中&#xff0c;Redis作为一种高性能的内存数据存…...

【论文阅读笔记】Attack-Resistant Federated Learning with Residual-based Reweighting

个人阅读笔记&#xff0c;如有错误欢迎指出 Arxiv 2019 [1912.11464] Attack-Resistant Federated Learning with Residual-based Reweighting (arxiv.org) 问题&#xff1a; 联邦学习容易受到后门攻击 创新&#xff1a; 提出一种基于残差的重新加权聚合算法 聚合算法…...

DevOps B站学习版(二)

学习地址&#xff1a; 01.DevOps的诞生_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1Pt4y1H7Zq/?p1&vd_source1f09c23f556b3d6a9b7706f8db12fa54%E3%80%81 正文开始 找到这个地方&#xff0c;修改 可以写成基于标签拉取和构建工程&#xff0c;下面也选择Tag即可…...

MySQL(一)基本架构、SQL语句操作、试图

MySQL系列文章 MySQL&#xff08;一&#xff09;基本架构、SQL语句操作、试图 MySQL&#xff08;二&#xff09;索引原理以及优化 MySQL&#xff08;三&#xff09;SQL优化、Buffer pool、Change buffer MySQL&#xff08;四&#xff09;事务原理及分析 MySQL&#xff08;五&a…...

MySQL事务基础知识

文章目录 一、事务简介二、事务操作1.查看事务提交方式2.设置事务提交方式3.开启事务4.提交事务5.回滚事务 三、事务四大特性ACID四、并发事务的问题五、并发事务隔离级别六、代码实例1.脏读实例2.不可重复读实例3.幻读的实例4.串行化的实现 一、事务简介 事务是一组操作的集合…...

form表单禁止浏览器自动填充密码

因为用户修改密码的时候,谷歌浏览器、edge等浏览器,总是自动将保存的密码填充到重置密码输入框中,给用户使用带来困扰。原因是因为你在登录的时候选择记住了账号和密码了,所以就会把信息存在浏览器里面,当你在修改密码的时候,由于form表单的 type="password" 所…...

ios oc button 设置

Button调整内部的子控件的位置...

山西电力市场日前价格预测【2023-07-17】

日前价格预测 预测明日&#xff08;2023-07-17&#xff09;山西电力市场全天平均日前电价为335.50元/MWh。其中&#xff0c;最高日前电价为377.51元/MWh&#xff0c;预计出现在06: 00。最低日前电价为271.94元/MWh&#xff0c;预计出现在13: 30。 价差方向预测 1&#xff1a;实…...

vue3功能实现

在vue2中&#xff0c;要实现一些方法&#xff08;增删改查&#xff09;一般都是写在一起的。如下图所示&#xff1a; 但是在vue3中&#xff0c;实现一个方法需要用到很多文件。 方法定义方法如下&#xff1a; export function classSign(phone: string) {return sign_reques…...

微服务系列文章 之 SpringCloud中遇到的一些bug

1、There was a problem with the instance info replicator 错误原因&#xff1a; 该服务尝试将自己作为客服端注册解决办法&#xff1a; 在application.yml配置文件中&#xff0c;设置 # 注册Eureka服务 eureka:client:# Eureka服务注册中心会将自己作为客户端来尝试注册它自…...

Linux——权限

目录 1.Shell运行原理——外壳程序 2.权限 2.1对人操作 2.2对角色和文件操作 3.常见权限问题 1.Shell运行原理——外壳程序 首先我们要明确一个概念&#xff0c;我们不是直接访问操作系统。为什么&#xff1f; 对于Windows我们是使用GUI进行操作&#xff0c;Shell对于Li…...

[英语单词] components;

*[kәm’pәunәnt] n. 元件, 组件, 成分 a. 组成的, 构成的 【计】 组件 【化】 组分 【医】 成分; 组元(神经元组) 有很多地方使用这个单词&#xff0c;在组成整体时&#xff0c;作为单位一内的占有比率。那为什么不用portion&#xff1f; 这样每一个组成部分都是一个compon…...

【观察者模式】 ——每天一点小知识

&#x1f4a7; 观察者模式 \color{#FF1493}{观察者模式} 观察者模式&#x1f4a7; &#x1f337; 仰望天空&#xff0c;妳我亦是行人.✨ &#x1f984; 个人主页——微风撞见云的博客&#x1f390; &#x1f433; 《数据结构与算法》专栏的文章图文并茂&#x1f995;…...

el-ment ui 表格组件table实现列的动态插入功能

在实际需求中我们经常遇到各种奇葩的需求&#xff0c;不足为奇。每个项目的需求各不相同&#xff0c;实现功能的思路大致是一样的。 本文来具体介绍怎么实现table表格动态插入几列。 首先实现思路有2种&#xff0c; 1. 插入的位置如果是已知的&#xff0c;我知道在哪个标题的…...

gitLab修改密码后,sourceTree如何修改密码

修改gitLab密码后&#xff0c;在sourceTree提交或者更新代码会报&#xff1a;fatal: Authentication failed for~ 简单粗暴的方法&#xff1a; 到C:\Users\用户\AppData\Local\Atlassian\SourceTree&#xff0c;找到passwd文件&#xff0c;并删除&#xff1b; 重启sourceTre…...

sop是什么意思

标准作业程序 执行复杂的日常事务所设计的内部程序 内容 所谓SOP&#xff0c;是 Standard Operating Procedure三个单词中首字母的大写 &#xff0c;即标准作业程序&#xff0c;指将某一事件的标准操作步骤和要求以统一的格式描述出来&#xff0c;用于指导和规范日常的工作。…...

【C#】Kestrel和IIS服务器下的同步与异步配置

最近在回看自己写的代码时&#xff0c;发现服务配置里最开头写了两段代码&#xff0c;第一感觉&#xff0c;这是啥功能&#xff0c;太久有点生疏了&#xff0c;经过一顿搜索和回顾&#xff0c;简单整理如下 目录 1、Kestrel服务器1.1、跨平台1.2、高性能1.3、可扩展性1.4、安全…...

GoLand导入redis的github包失败

GoLand导入redis依赖失败 网上有下载guryburd和gomodel的&#xff0c;这里按照官网文档安装依赖 以下命令在项目的根目录执行 初始化一个Go模块&#xff1a; go mod init github.com/my/repoTo install go-redis/v9:要安装go-redis/v9&#xff1a; go get github.com/redis/…...

神经网络 隐藏层

神经网络中隐藏层的数量是一个超参数&#xff0c;其选择取决于任务复杂度、数据规模和计算资源。以下是常见的架构类型及其适用场景&#xff1a; 1. 单层隐藏层&#xff08;浅神经网络&#xff09; 结构&#xff1a;输入层 → 1 个隐藏层 → 输出层特点&#xff1a; 仅需调整…...

如何计算1920*1080分辨率的YUV或RGB图像数据占用大小?

好多开发者在对接大牛直播SDK的时候&#xff0c;经常问到的问题是&#xff0c;1920*1080分辨率的YUV或RGB图像数据&#xff0c;到底多少字节&#xff1f;在音视频图像开发中&#xff0c;19201080&#xff08;即 Full HD&#xff09;是一种极其常见的分辨率。但很多开发者在处理…...

深入浅出Spring Security

一、Spring Security基本组件 Spring Security的设计理念是提供一种可插拔的、高度可定制的安全服务。其核心功能依赖于以下几个关键组件&#xff1a; Authentication (认证): 概念: 确认用户身份的过程&#xff0c;即验证“你是谁”。核心类: Authentication 接口&#xff0c…...

《深入理解 Nacos 集群与 Raft 协议》系列四:日志复制机制:Raft 如何确保提交可靠且幂等

《深入理解 Nacos 集群与 Raft 协议》系列 大家好&#xff0c;我是G探险者&#xff01; 在前几篇中我们介绍了选主与日志对比机制&#xff0c;它们保证了“谁能成为 Leader”以及“Leader 的日志是否可靠”。 而当 Leader 已选定&#xff0c;系统需要把客户端的写请求写入所…...

基于深度学习(Unet和SwinUnet)的医学图像分割系统设计与实现:超声心脏分割

基于深度学习的医学图像分割系统设计与实现 摘要 本文提出了一种基于深度学习的医学图像分割系统,该系统采用U-Net和Swin-Unet作为核心网络架构,实现了高效的医学图像分割功能。系统包含完整的训练、验证和推理流程,并提供了用户友好的图形界面。实验结果表明,该系统在医…...

Flask音频处理:构建高效的Web音频应用指南

引言 在当今多媒体丰富的互联网环境中&#xff0c;音频处理功能已成为许多Web应用的重要组成部分。无论是音乐分享平台、语音识别服务还是播客应用&#xff0c;都需要强大的音频处理能力。Python的Flask框架因其轻量级和灵活性&#xff0c;成为构建这类应用的理想选择。 本文…...

Python实例题:Python计算微积分

目录 Python实例题 题目 代码实现 实现原理 符号计算&#xff1a; 数值计算&#xff1a; 可视化功能&#xff1a; 关键代码解析 1. 导数计算 2. 积分计算 3. 微分方程求解 4. 函数图像绘制 使用说明 安装依赖&#xff1a; 基本用法&#xff1a; 示例输出&#…...

Spark 之 DataFrame 开发

foreachPartition val data = spark.sparkContext.parallelize(1 to 100)// 使用 foreachPartition 批量处理分区 data.foreachPartition {partitionIterator =...

python版若依框架开发:后端开发规范

python版若依框架开发 从0起步,扬帆起航。 python版若依部署代码生成指南,迅速落地CURD!项目结构解析前端开发规范后端开发规范文章目录 python版若依框架开发1.启动命令2.配置⽂件3.上传配置1.启动命令 本项⽬⾃定义了两个启动命令 pyhton app.py --env=devpython app.p…...

.Net Framework 4/C# 集合和索引器

一、ArrayList 类&#xff08;集合&#xff09; ArrayList 类位于 System.Collections 命名空间下&#xff0c;它可以动态地添加和删除元素。 ArrayList 提供了3个构造器&#xff0c;通过这3个构造器可以有3种声明方式&#xff1a; 默认构造器&#xff0c;将会以默认&#xff…...