springboot读取编译时传递的参数
需要借助application.properties的注入,才能进入到程序之中;
1.application.properties文件中配置:
customer.key=@abc.d@
2. pom文件中要配置替换规则:
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
<includes>
<!-- 匹配 resources 下所有目录里的 .properties 文件 -->
<include>**/*.properties</include>
<!-- 匹配 resources 下所有目录里的 .xml 文件 -->
<include>**/*.xml</include>
<!-- 匹配 resources 下所有目录里的 .yml 文件 -->
<include>**/*.yml</include>
<!-- 匹配 resources 下所有目录里的 .yaml 文件 -->
<include>**/*.yaml</include>
<!-- 匹配 resources 下所有目录里的 .html 文件 -->
<include>**/*.html</include>
<!-- 匹配 resources 下所有目录里的 .js 文件 -->
<include>**/*.js</include>
<!-- 匹配 resources 下所有目录里的 .css 文件 -->
<include>**/*.css</include>
</includes>
</resource>
<resource>
<directory>src/main/resources</directory>
<filtering>false</filtering> <!-- 二进制文件不过滤 -->
<includes>
<include>**/*.png</include>
<include>**/*.jpg</include>
<include>**/*.gif</include>
<include>**/*.jar</include>
<include>**/*.zip</include>
<include>**/*.jpeg</include>
</includes>
</resource>
</resources>
3.程序中进行读取:
@Value("${customer.key:1}")
private String value;
4. 编译的时候去传递,例如:mvn clean package -Dabc.d=test
补充说明 如果要指定profile;可以加上 mvn clean package -Dabc.d=test -P dev
----------------------------------------------------------------------------------------------------------------------------
@Value("${customer.key}") 这里不能通过${} 直接获取,${}获取的是运行时参数,@ @获取的是编译时候的参数,如果是运行时参数,传递为 java -jar -Ddefind.key=v app.jar ; 获取可以通过@Value("${defind.key}") 或者System.getProperty("defind.key") 直接获取
-----------------------------------------------------------------------------------------------------------------------------
java -jar -Ddefind.key=v 设置的是jvm参数,java -jar --defind.key=v设置的是spring命令行参数,两个都可以通过@Value("${defind.key}")
Spring Boot 的配置优先级如下(从高到低):
命令行参数
--app.key=xxx
application.properties
/application.yml
JVM 系统参数
-Dapp.key=xxx
环境变量
export app.key=xxx
默认值(在代码或配置中写死的)
所以:命令行参数 --app.key=xxx
优先级高于 -Dapp.key=xxx
。