一、背景
在日常开发过程中,我们都会有多套开发环境,比如:开发、测试、生产等不同的应用环境,这些应用环境都对应不同的配置项,包括不同环境数据库地址、端口号等都是不尽相同的,要是没有多环境的自由切换,部署起来是很繁琐也容易出错的。本文主要介绍在 SpringBoot 项目中如何进行多环境配置的方法。
二、采用Maven环境切换方式
在 Maven项目中,我们有一种简洁的多环境配置方式,Maven 的思路是资源文件根据环境进行隔离,在测试的时候去加载正确的配置资源进行配置,另外 Maven 的多环境资源隔离配置与 Jenkins CI 集成较好。
1、pom.xml配置
先配置 pom.xml 文件的 build 节点。
build>
resources>
resource>
directory>src/main/resources/directory>
filtering>true/filtering>
!--扫描替换参数的文件路径-->
/resource>
/resources>
filters>
filter>src/main/filters/filter-${env}.properties/filter>
!--环境过滤器的配置方式,回头需要在该路径下建立对应文件-->
/filters>
plugins>
plugin>
artifactId>maven-resources-plugin/artifactId>
configuration>
encoding>${project.build.sourceEncoding}/encoding>
!-- 需要加入,因为maven默认的是${},而springbooot 默认会把此替换成@{} -->
useDefaultDelimiters>true/useDefaultDelimiters>
/configuration>
/plugin>
plugin>
groupId>org.springframework.boot/groupId>
artifactId>spring-boot-maven-plugin/artifactId>
version>${spring-boot-maven-plugin.version}/version>
configuration>
fork>true/fork>
/configuration>
/plugin>
/plugins>
/build>
在 pom.xml 文件配置 properties
!-- 主要依赖库的版本定义,可以采用${属性名}引用 -->
properties>
project.build.sourceEncoding>UTF-8/project.build.sourceEncoding>
project.reporting.outputEncoding>UTF-8/project.reporting.outputEncoding>
!-- plugin 定义 -->
spring-boot-maven-plugin.version>2.1.6.RELEASE/spring-boot-maven-plugin.version>
/properties>
以上的配置主要做的事情就是标记资源文件,把 src/main/filters/filter-${env}.properties 也标记为了资源文件,{env} 的具体值见下面的配置
在 pom.xml 文件配置 Properties 环境,多环境配置参数切换
!-- 不同的测试环境 -->
profiles>
!-- 开发环境,默认激活 -->
profile>
id>dev/id>
properties>
env>dev/env>
/properties>
activation>
activeByDefault>true/activeByDefault>!--默认启用环境配置-->
/activation>
/profile>
!-- 测试环境 -->
profile>
id>test/id>
properties>
env>test/env>
/properties>
/profile>
!-- 线上环境 -->
profile>
id>product/id>
properties>
env>product/env>
/properties>
/profile>
/profiles>
2、配置文件
在 src/main/filters 下创建配置文件:
- filter-dev.properties:开发环境
- filter-product.properties:线上环境
- filter-test.properties:测试环境
用于环境信息记录,如:
#Environment
Environment=dev
host=http://127.0.0.1
port=8082
jdbc-url=xxxx
jdbc-username=xxxx
jdbc-password=xxxx
在 src/resource 下创建 application-maven.properties 文件。 该文件记录的信息是跟环境切换相关的参数,里面可以使用 key=value 的形式配置变量。 如:接口请求不同环境的host、数据库等,因不同环境的信息。
java请求接口的几种方式有哪些 java请求api
server.port=${port}
# Environment
Environment=${Environment}
Host.url=${host}
# 数据源配置
spring.datasource.url=${jdbc-url}
spring.datasource.username==${jdbc-usernamel}
spring.datasource.password==${jdbc-password}
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
如图: