背景
生产环境部署的时候,开发给的包部署后没有生效;运维说开发给的包不对,开发说运维没有部署正确;
于是想着能有一种方法来减少这种错误,启动的时候把打包的时间打印出来;
pom文件配置
在pom文件中新增properties,maven打包的时候会读取该配置:
<properties>
<maven.build.timestamp.format>yyyy-mm-dd't'hh:mm:ssxxx</maven.build.timestamp.format>
</properties>
新增一个properties文件
在资源目录新增一个properties文件,注意这里一定是一个properties文件,不能是yaml
内容如下即可:
# maven 打包时间 build.time= @maven.build.timestamp@
用两个@符号将maven打包可识别的变量包住
配置pom文件,让打包的时候能让maven编译时替换properties文件内容
<build>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/**</include>
</includes>
<filtering>true</filtering>
</resource>
</resources>
</build>
关键配置:filtering 为true
新增一个配置类映射properties文件内字段
import lombok.getter;
import lombok.setter;
import lombok.extern.slf4j.slf4j;
import org.springframework.beans.factory.initializingbean;
import org.springframework.boot.context.properties.configurationproperties;
import org.springframework.context.annotation.propertysource;
import org.springframework.stereotype.component;
import java.time.instant;
import java.time.zoneid;
import java.time.format.datetimeformatter;
import java.util.objects;
/**
* maven打包相关配置类
*/
@component
@propertysource(value = {"classpath:xxx.properties"}, encoding = "utf-8")
@configurationproperties(prefix = "build")
@getter
@setter
@slf4j
public class mavenbuildconfig implements initializingbean {
/**
* 打包时间
*/
private string time;
@override
public void afterpropertiesset() throws exception {
// utc时间
string buildtime = this.gettime();
if (objects.nonnull(buildtime) && buildtime.contains("t") && buildtime.endswith("z")) {
try {
// 自定义格式(utc 时间 → 本地时间字符串)
instant instant = instant.parse(buildtime);
datetimeformatter formatter = datetimeformatter.ofpattern(utils.yyyy_mm_dd_hh_mm_ss).withzone(zoneid.systemdefault());
buildtime = formatter.format(instant);
} catch (exception e) {
log.error("afterpropertiesset error: {}", e.getmessage(), e);
}
}
log.info("========================== maven-build-time: {} ==========================", buildtime);
}
}
启动查看效果

总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。
发表评论