资源文件分环境配置
How to separate your configure file by different enviroment
1. 关于maven build标签?
你可以在<profile>标签下声明<build>标签,也可以直接在<project>标签下声明<build>标签
<build>
<defaultGoal>package</defaultGoal>
<directory>${basedir}/target</directory>
<finalName>${artifactId}-${version}</finalName>
...
</build>
defaultGoal,默认构建行为,如package,install等
directory,构建结果所在的路径,默认为${basedir}/target目录
finalName,构建结果的名字
如下图所示,默认构建行为:

构建结果所在的路径和名称:

resources标签引入资源文件,资源文件如properties或XML配置文件,无需编译,构建过程中会将资源文件从源路径复制到指定的目标路径。
<!-- resources标签:声明资源文件 -->
<resources>
<resource>
<!-- 构建过程中是否对资源进行过滤 -->
<filtering>true</filtering>
<!-- 资源文件的路径 -->
<directory>${basedir}/src/main/resources</directory>
<!-- 资源文件的目标路径 -->
<targetPath>META-INF/aaa</targetPath>
<!-- 包含哪些文件 -->
<includes>
<include>**/application*.yml</include>
<include>**/application*.yaml</include>
<include>**/application*.properties</include>
<include>**/application-${myActivateFile}.yml</include>
<include>**/application-${myActivateFile}.yaml</include>
<include>**/application-${myActivateFile}.properties</include>
</includes>
<!-- 不包含哪些文件 -->
<excludes>
<exclude>**/aaa*.properties</exclude>
</excludes>
</resource>
</resources>
如下图所示,资源文件的目标路径:

不包含下列文件:

2. 怎样在不同的部署环境启用不同的配置文件?
通过激活不同的profile来使用不同的配置。
例如我的项目分离了3种开发环境的配置文件。

然后配置3个profile标签,分别为:local,test,prod,激活的profile不同,myActivateFile变量就不同。你可以在 <profile> 的 <activation> 元素下隐式激活了本地开发环境的配置。
<!-- maven打包时指定配置文件 -->
<profiles>
<!-- 本地开发环境 -->
<profile>
<id>dev</id>
<properties>
<myActivateFile>local</myActivateFile>
</properties>
<activation>
<!-- 默认开启本地开发环境 -->
<activeByDefault>true</activeByDefault>
</activation>
</profile>
<!-- 测试环境 -->
<profile>
<id>test</id>
<properties>
<myActivateFile>test</myActivateFile>
</properties>
</profile>
<!-- 生产环境 -->
<profile>
<id>pro</id>
<properties>
<myActivateFile>prod</myActivateFile>
</properties>
</profile>
</profiles>
通过myActivateFile变量加载不同环境配置文件
<!-- resources标签:声明资源文件 -->
<resources>
<resource>
<!-- 构建过程中是否对资源进行过滤 -->
<filtering>true</filtering>
<!-- 资源文件的路径 -->
<directory>${basedir}/src/main/resources</directory>
<!-- 包含哪些文件 -->
<includes>
<include>**/mapper/**/*.xml</include>
<include>**/application.yml</include>
<include>**/application.yaml</include>
<include>**/application.properties</include>
<include>**/application-${activatedProperties}.yml</include>
<include>**/application-${activatedProperties}.yaml</include>
<include>**/application-${activatedProperties}.properties</include>
</includes>
<!-- 不包含哪些文件 -->
<excludes>
<exclude>**/fileUnWanted.properties</exclude>
</excludes>
</resource>
</resources>
现在默认激活的是local profile,打包后的配置文件如下:

3. 怎样在不同的部署环境启用不同的外部配置文件?
一些敏感的配置信息(例如连接信息),通常由运维人员配置管理,这就要求将这些信息从项目中分离出来,并在应用发布时加载。
分离连接信息后的application.yml配置如下:

在D:\IdeaProjects\springboot\conf目录下新建3个不同环境配置文件(如果时linux系统,改成对应linux路径),用来配置连接信息。


加入参数启动应用,加载外部配置文件。

启动成功即可。