Appearance
六、Spring Boot中多环境配置
1、指定项目配置文件
我们知道,在实际项目中,一般有两个环境:开发环境和生产环境。开发环境中的配置和生产环境中的配置往往不同,比如:环境、端口、数据库、相关地址等等。我们不可能在开发环境调试好之后,部署到生产环境后,又要将配置信息全部修改成生产环境上的配置,这样太麻烦,也不科学。
最好的解决方法就是开发环境和生产环境都有一套对用的配置信息,然后当我们在开发时,指定读取开发环境的配置,当我们将项目部署到服务器上之后,再指定去读取生产环境的配置。
我们新建两个配置文件: application-dev.yml
和 application-pro.yml
,分别用来对开发环境和生产环境进行相关配置。这里为了方便,我们分别设置两个访问端口号,开发环境用 8001,生产环境用 8002.
yaml
# 开发环境配置文件
server:
port: 8001
yaml
# 开发环境配置文件
server:
port: 8002
然后在 application.yml
文件中指定读取哪个配置文件即可。比如我们在开发环境下,指定读取 applicationn-dev.yml
文件,如下:
yaml
spring:
profiles:
active:
- dev
这样就可以在开发的时候,指定读取 application-dev.yml
文件,访问的时候使用 8001 端口,部署到服务器后,只需要将 application.yml
中指定的文件改成 application-pro.yml
即可,然后使用 8002 端口访问,非常方便。
运行 jar 的时候指定
sh
java -jar xxx.jar --spring.profiles.active=test
2、Maven 的多环境配置
Maven
本身也提供了对多环境的支持,不仅仅支持 Spring Boot
项目,只要是基于 Maven
的项目都可以配置。
Maven
对于多环境的支持在功能方面更加强大,支持 JDK版本 、 资源文件 、 操作系统
等等因素来选择环境。
创建多环境配置文件
创建不同环境的配置文件,分别是 application-dev.properties
、 application-test.properties
、 application-prod.properties
。
加上默认的配置文件 application.properties
同样是四个配置文件。
定义激活的变量
需要将 Maven 激活的环境作用于 Spring Boot ,实际还是利用了 spring.profiles.active
这个属性,只是 现在这个属性的取值将是取值于 Maven 。配置如下:
java
spring.profiles.active=@profile.active@
profile.active
实际上就是一个变量,在maven
打包的时候指定的-P test
传入的就是值。
pom 文件中定义 profiles
需要在 maven
的 pom.xml
文件中定义不同环境的 profile
,如下:
xml
<!--定义三种开发环境-->
<profiles>
<profile>
<!--不同环境的唯一id-->
<id>dev</id>
<activation>
<!--默认激活开发环境-->
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<!--profile.active对应application.yml中的@profile.active@-->
<profile.active>dev</profile.active>
</properties>
</profile>
<!--测试环境-->
<profile>
<id>test</id>
<properties>
<profile.active>test</profile.active>
</properties>
</profile>
<!--生产环境-->
<profile>
<id>prod</id>
<properties>
<profile.active>prod</profile.active>
</properties>
</profile>
</profiles>
标签 <profile.active>
正是对应着配置文件中的 @profile.active@
。 <activeByDefault>
标签指定了默认激活的环境,则是打包的时候不指定 -P
选项默认选择的环境。
以上配置完成后,将会在IDEA的右侧 Maven 选项卡中出现以下内容:
可以选择打包的环境,然后点击 package
即可。
或者在项目的根目录下用命令打包,不过需要使用-P
指定环境,如下:
sh
mvn clean package package -P test
maven
中的profile
的激活条件还可以根据 jdk 、 操作系统 、 文件存在或者缺失
来激活。这些内容都是在 标签中配置,如下:
xml
<!--activation用来指定激活方式,可以根据jdk环境,环境变量,文件的存在或缺失-->
<activation>
<!--配置默认激活-->
<activeByDefault>true</activeByDefault>
<!--通过jdk版本--> <!--当jdk环境版本为1.8时,此profile被激活-->
<jdk>1.8</jdk>
<!--当jdk环境版本1.8或以上时,此profile被激活-->
<jdk>[1.8,)</jdk>
<!--根据当前操作系统-->
<os>
<name>Windows XP</name>
<family>Windows</family>
<arch>x86</arch>
<version>5.1.2600</version>
</os>
</activation>
资源过滤
如果你不配置这一步,将会在任何环境下打包都会带上全部的配置文件,但是我们可以配置只保留对应环境下的配置文件,这样安全性更高。
这一步配置很简单,只需要在 pom.xml
文件中指定 <resource>
过滤的条件即可,如下:
xml
<build>
<resources>
<!--排除配置文件-->
<resource>
<directory>src/main/resources</directory>
<!--先排除所有的配置文件-->
<excludes>
<!--使用通配符,当然可以定义多个exclude标签进行排除-->
<exclude>application*.properties</exclude>
</excludes>
</resource>
<!--根据激活条件引入打包所需的配置和文件-->
<resource>
<directory>src/main/resources</directory>
<!--引入所需环境的配置文件-->
<filtering>true</filtering>
<includes>
<include>application.yml</include>
<!--根据maven选择环境导入配置文件-->
<include>application-${profile.active}.yml</include>
</includes>
</resource>
</resources>
</build>
上述配置主要分为两个方面,第一是先排除所有配置文件,第二是根据 profile.active
动态的引入配置 文件。