给Spring Boot 项目打上编译时间

为了方便查阅项目的编译时间,确定部署在服务器上的服务对应哪个版本,以前总是要手动的改动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 是设置时间格式的。怎么设置看大家的喜好。

${maven.build.timestamp}
yyyy-MM-dd HH:mm

将编译时间替换进application.yml

在POM文件的build section使能资源文件替换


   
      src/main/resources
      true
   

然后往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就可以了。

            
                org.codehaus.mojo
                build-helper-maven-plugin
                3.0.0
                
                    
                        timestamp-property
                        
                            timestamp-property
                        
                        
                            build.timestamp.with.offset
                            yyyy-MM-dd HH:mm
                            CCT
                        
                    
                
            

妈妈再也不用担心搞不清编译版本了

你可能感兴趣的:(springboot)