Spring Boot多环境切换配置
前言
日常开发中至少有三个环境,分别是开发环境( dev ),测试环境( test ),生产环境( prod )。不同的环境的各种配置都不相同,比如数据库,端口, IP 地址等信息。
Spring Boot 自带的多环境配置
Spring Boot 对多环境整合已经有了很好的支持,能够在打包,运行间自由切换环境。
创建不同环境的配置文件
既然每个环境的配置都不相同,索性将不同环境的配置放在不同的配置文件中,因此需要创建三个不同的配置文件,分别是application-dev.properties、application-test.properties 和 application-prod.properties 。
注意:配置文件的名称一定要是 application-name.properties 或者 application-name.yml 格式。这个 name 可以自定义,主要用于区分。
此时整个项目中就有四个配置文件,加上 application.properties 。
指定运行的环境
虽然你创建了各个环境的配置文件,但是 Spring Boot 仍然不知道你要运行哪个环境,有以下两种方式指定:
配置文件中指定
在 application.properties 或者 application.yml 文件中指定,内容如下:
1 | # 指定运行环境为测试环境 |
以上配置有什么作用呢?
如果没有指定运行的环境, Spring Boot 默认会加载 application.properties 文件,而这个的文件又告诉 Spring Boot 去找 test 环境的配置文件。
运行 jar 的时候指定
Spring Boot 内置的环境切换能够在运行 Jar 包的时候指定环境,命令如下:
1 | java -jar xxx.jar --spring.profiles.active=test |
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 。
配置如下:
1 | spring.profiles.active=@profile.active@ |
profile.active
实际上就是一个变量,在 maven 打包的时候指定的 -P test 传入的就是值。
pom 文件中定义 profiles
需要在 maven 的 pom.xml
文件中定义不同环境的 profile
,如下:
1 | <!--定义三种开发环境--> |
标签 <profile.active>
正是对应着配置文件中的 @profile.active@
。
<activeByDefault>
标签指定了默认激活的环境,则是打包的时候不指定 -P
选项默认选择的环境。
以上配置完成后,将会在IDEA的右侧 Maven 选项卡中出现 package ,可以选择打包的环境,然后点击 package 即可。
或者在项目的根目录下用命令打包,不过需要使用 -P
指定环境,如下:
1 | mvn clean package package -P test |
maven 中的 profile
的激活条件还可以根据 jdk 、操作系统 、文件存在或者缺失来激活。这些内容都是
在 <activation>
标签中配置,如下:
1 | <!--activation用来指定激活方式,可以根据jdk环境,环境变量,文件的存在或缺失--> |
资源过滤
如果你不配置这一步,将会在任何环境下打包都会带上全部的配置文件,但是我们可以配置只保留对应环境下的配置文件,这样安全性更高。
这一步配置很简单,只需要在 pom.xml
文件中指定 <resource>
过滤的条件即可,如下:
1 | <build> |
上述配置主要分为两个方面,第一是先排除所有配置文件,第二是根据 profile.active
动态的引入配置 文件。
总结
至此, Maven 的多环境打包已经配置完成,相对来说挺简单,既可以在 IDEA 中选择环境打包,也同样支持命令 -P
指定环境打包。