接口查询SpringBoot版本和构建时间

接口查询SpringBoot版本构建时间

背景

由于公司项目是部署到现场,不同现场用的版本不同,需要提供一个接口查询当前系统部署的版本

思路

利用maven动态获取当前编译时间以及jar包版本(project.version)
通过resource/Filtering将变量替换到我们的文件当中,比如application.yml
那么我们的程序就可以获取到这些值

程序取properties的值

程序要获取jar包版本主要是获取pom.xml里project.version的值
这里我们需要查看Apache Maven Resources Plugin插件
经过这个插件可以使我们在程序的文件,比如application.yml里获取到我们想要获取的值
project.version,实现原理是通过写指定格式,然后插件会替换对应的值
官方filtering参考文档

示例

新建src/main/resourecs/hello.txt

# src/main/resourecs/hello.txt
Hello ${name}  
# 注意如果parent是`spring-boot-starter-parent`,需要使用@name@
Hello @name@  

# pom.xml
<project>
  <name>My Resources Plugin Practice Project</name>
  ...

  <build>
    <resources>
      <resource>
        <directory>src/main/resources</directory>
      </resource>
      ...
    </resources>
  </build>
</project>

# 执行
mvn resources:resources

# 结果1
Hello ${name}

# 修改resource加上filtering
<resources>
    <resource>
    <directory>src/main/resources</directory>
    <filtering>true</filtering>
    </resource>
    ...
</resources>

# 执行
mvn resources:resources

# 结果2,此时name已经被替换了
Hello My Resources Plugin Practice Project

${}和@…@

关于${}不生效的问题,可能是你使用了spring-boot-starter-parent
需要改成@…@的形式
相关文档

# application.yml,配置后,经过resources插件处理,@project.version@会变成
system:
    config: 
        # build_version: #{project.version}
        build_version: @project.version@
# 经过处理后我们可以直接在程序里使用我们熟悉的@Value获取到值使用
@Value("${system.config.build_version}")
private String buildVersion;

maven Model Interpolation

上面我们获取到了版本,现在我们需要获取到编译时间

maven提供了内置变量maven.build.timestamp为编译开始的时间
默认格式为yyyy-MM-dd'T'HH:mm:ss'Z'
可以通过 maven.build.timestamp.format格式化

maven.build.timestamp
the UTC timestamp of build start, in yyyy-MM-dd’T’HH:mm:ss’Z’ default format, which can be overridden with maven.build.timestamp.format POM property
我们可以通过${}的形式在pom.xml这种获取到这个变量

<properties>
    <!--maven.build.timestamp保存了maven编译时间戳-->
    <!-- 经过 maven Model Interpolation 的处理,实际上相当于-->
    <!-- <timestamp>2022-6-28 16:03:11</timestamp> -->
    <timestamp>${maven.build.timestamp}</timestamp>
    <!--指定时间格式-->
    <maven.build.timestamp.format>yyyy-MM-dd HH:mm:ss</maven.build.timestamp.format>
</properties>

上面这种格式maven会通过Model Interpolation插值处理帮我们替换,但只限于pom.xml
替换完成后就和我们获取版本的使用方式一样了

system:
    config:
        # 获取properties的时候可以直接用key取值,一样如果不是使用parent用#{}的写法
        build_time: @timestamp@
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ikarosxx

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值