IDEA
+Maven
_POM.xml
的Profile
来动态切换配置信息
前言:
通常开发人员,需要面对不同的编码环境, 如果频繁修改配置文件的话,可能会忙中出错。
例如环境有: 开发环境、测试环境、生产环境。
使用Maven的打包插件可以进行动态切换使用那些配置文件进行打包或者运行!
1.0 build节点里面重要节点介绍
在
maven
的pom.xml
文件中build
节点用来管理执行maven声明周期的(也就是打包)。
1.1 <finalName>
节点
表示最终打包完成后, 包的名称
1.2 <plugins>
节点 (重要点)
用来设置执行打包命令插件、资源文件的字符集等 (例如也
maven-clean-plugin
(清理)、maven-compiler-plugin
(编译)、maven-resources-plugin
(不同目的显式更改编码), 等等自行网上搜索。 )
1.3 resources
节点
1.3.1 directory节点(指定配置文件目录)
默认情况下,Maven将在
src / main / resources
下查找项目的资源,但是,您的所有资源可能都不在
src / main / resources中
。因此,您必须通过将以下内容添加到POM中来指定这些目录。
<build>
...
<resources>
<resource>
<directory>资源文件夹路径(假设你resources文件夹放在了src下面 就写成 src/resources)</directory>
</resource>
</resources>
...
</build>
此外,可以通过添加多个
<resource>
节点来拥有多个目录:
1.3.2 filtering
节点
进行变量过滤, 变量可以包含在您的资源中。这些变量用
$ {...}
分隔符表示,可以来自系统属性,项目属性,过滤器资源和命令行。
例如,如果有一个配置文件资源
src / main / resources / application.yml
包含
server:
port: ${port}
pom
文件
<project>
...
<port>8888</port>
...
<build>
...
<resources>
<resource>
<directory>src/main/resources</directory>
</resource>
...
</resources>
...
</build>
...
</project>
这样直接打包的换, 打包好的
application.yml
配置文件会原样输出${port}
但是,如果将
<filtering>
标记添加到POM并将其设置为true,
如下所示:
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
这样打包完成后application.yml
配置文件中的端口就会是8888
1.3.3 includes
节点与excludes节点
指定资源目录时,可能不会使用该目录中的每个文件。因此,我们可能只需要指定要包含的文件或指定要排除的文件。
要包含资源,我们只需要添加一个
<includes>节点
, 排除添加<excludes>
节点
<build>
......
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>*.yml</include>
</includes>
<excludes>
<exclude>logback-spring.xml</exclude>
</excludes>
<filtering>true</filtering>
</resource>
</resources>
</build>
上面节点说明: 将
resources
所有后缀带yml
的进行打包入jar
包 , 排除logback-spring.xml
不进行打包入jar
包。
includes
与excludes
节点可以配置多个。节点就介绍到这, 下面进行一个Demo配置入门。
2.0 IDEA配置SpringBoot
配合Maven_Profiles
动态切换配置文件
2.1 先准备好3个环境的配置文件
在resources配置文件目录下准备3个文件:
application-dev.yml
、application-test.yml
、application-pro.yml
内容就只是端口不同:
#-dev.yml开发端口
server:
port: 18888
#-test.yml测试环境端口
server:
port: 8080
#-pro.yml生产环境端口
server:
port: 80
2.2 pom
文件配置
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<!--动态切换配置文件 resources-plugin插件是必选的-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>3.1.0</version>
<!--使用默认的变量分割符即${}-->
<configuration>
<useDefaultDelimiters>true</useDefaultDelimiters>
</configuration>
</plugin>
</plugins>
<resources>
<resource>
<!--打包该目录下的 application.yml 和先排除掉所以的环境配置文件-->
<directory>src/main/resources</directory>
<includes>
<include>application.yml</include>
</includes>
<excludes>
<exclude>application-pro.yml</exclude>
<exclude>application-dev.yml</exclude>
<exclude>application-test.yml</exclude>
</excludes>
<!-- 启用过滤 即该资源中的变量将会被过滤器中的值替换 -->
<filtering>true</filtering>
</resource>
<resource>
<directory>src/main/resources</directory>
<!-- 打包导入选择的环境文件${profiles.active} 优先级比排除上面排除大 -->
<includes>
<include>application-${profiles.active}.yml</include>
</includes>
<!-- 不进行过滤 -->
<filtering>false</filtering>
</resource>
</resources>
</build>
<profiles>
<profile>
<!-- 本地开发环境 -->
<id>dev</id>
<properties>
<profiles.active>dev</profiles.active>
</properties>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
</profile>
<profile>
<!-- 测试环境 -->
<id>test</id>
<properties>
<profiles.active>test</profiles.active>
</properties>
</profile>
<profile>
<!-- 生产环境 -->
<id>pro</id>
<properties>
<profiles.active>pro</profiles.active>
</properties>
</profile>
</profiles>
<profiles.active>
是自定义, 但是配置环境的3个名称节点都需要相同
然后在主application.yml
文件中加上
spring:
application:
name: SpringBootDemo
profiles:
active: ${profiles.active} #取其变量加载配置文件
2.3 在工具IDEA中选择使用那个配置文件
选择那个文件来进行启动与打包
2.4 选择了dev
启动项目与进行打包
2.5 选择了pro
启动项目与进行打包
如果出现了确定发现使用的不是选择的配置类, 则执行清理
target
编译过的文件夹或者执行maven_clean
命令清理,在重复进行操作。
1