为了方便查阅项目的编译时间,确定部署在服务器上的服务对应哪个版本,以前总是要手动的改动property文件。最近摸索出一种新的方法。
核心思路是将maven build time 写入Spring Boot 的application.yml,然后将application.yml的属性注入代码,暴露API供外部查询。
获取maven build time
主要参考了这篇文章:
https://rterp.wordpress.com/2...
在properties section 添加两个属性,maven.build.timestamp这个变量保存了maven编译时间戳,但无法直接替换到资源文件,所以使用timestamp 变量中转一下。maven.build.timestamp.format 是设置时间格式的。怎么设置看大家的喜好。
<timestamp>${maven.build.timestamp}</timestamp>
<maven.build.timestamp.format>yyyy-MM-dd HH:mm</maven.build.timestamp.format>
将编译时间替换进application.yml
在POM文件的build section使能资源文件替换
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
然后往application.yml注入时间,这里我犯过一个错误,使用了 ${timestamp},spring boot框架,将替换语法改成了@@。
self:
time: @timestamp@
将application.yml属性注入Java变量
一个简单的Value映射,即可将timestamp注入到变量,映射API,即可通过REST API查询到编译时间。
@Value("${self.time}")
String buildTime;
@RequestMapping("/version")
public String version() {
return buildTime;
}
时区问题
maven.build.timestamp
在maven 3.2.2 版本之后,取出来的是utc时间,和我们相差8个小时。最简单的方法是用build-helper-maven-plugin
,自己定义build.timestamp.with.offset
,后面在application.yml中直接build.timestamp.with.offset
就可以了。
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<version>3.0.0<ersion>
<executions>
<execution>
<id>timestamp-property</id>
<goals>
<goal>timestamp-property</goal>
</goals>
<configuration>
<name>build.timestamp.with.offset</name>
<pattern>yyyy-MM-dd HH:mm</pattern>
<timeZone>CCT</timeZone>
</configuration>
</execution>
</executions>
</plugin>
妈妈再也不用担心搞不清编译版本了
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。