Profile的应用场景
假如有开发、测试、生产三个不同的环境,需要定义三个不同环境下的配置。
SpringBoot有三种方式支持profile
方式一: 基于properties文件类型,在文件名称中添加profile参数
application-{profile}.properties
如:
application-dev.properties
application-test.properties
application-production.properties
方式二:基于yml文件类型,在文件名称中添加profile参数
application-{profile}.yml
如:
application-dev.yml
application-test.yml
application-production.yml
方式三:基于yml文件类型,在单个yml格式配置文件中通过spring.profiles属性来定义多套profile配置
# 启动时如果不指定profile,下面的配置生效
server:
port: 8080
---
# 定义dev环境参数
spring:
profiles: dev
server:
port: 8081
---
# 定义test环境参数
spring:
profiles: test
server:
port: 8082
---
# 定义prod环境参数
spring:
profiles: prod
server:
port: 8083
启用指定profile配置
直接在配置文件中写死
在application通用配置文件中通过属性
spring.profiles.active=xxx(此处三个x可写dev、test、prod)
直接写死启动时要启用的profile(只适合开发环境)
SpringBoot命令行启动时指定profile
如果 spring.profiles.active 没有指定值,那么只会使用没有指定 spring.profiles 的值,也就是只会加载通用的配置。
并且我们可以在启动应用程序的时候,对 spring.profiles.active 进行指定,这样就不需要每次修改环境都需要手动修改配置文件再编译。
运行 Jar 包时,使用命令行指定使用 xxx 环境参数:
java -jar xxxx.jar --spring.profiles.active=***
命令行中的三个点可写dev、test、prod,注意spring.profiles.active前面有两个“-”
使用 Maven 在打包时只加载特定的 Profiles 配置文件
由于各种各样的原因,我们肯定希望打出哪个环境的包,就只需要包含这个环境的配置文件即可,不想包含其他环境的配置文件,这时候可以直接在打包时直接指定环境。
打包时指定使用哪个环境
- 在application通用配置文件中使用占位符指定环境
spring.profiles.active=@profileName@
maven打包时指定的***,会自动替换掉这里的占位符【@profileName@】
- 在pom.xml文件中添加配置(位置:project标签下)
<!-- 配置maven打包时-P参数支持哪些profile -->
<profiles>
<!--开发环境-->
<profile>
<id>dev</id>
<properties>
<!--
这里可以定义多个参数,标签的名字就对应properties文件中的key
比如:<profileName>在配置文件中写成@profileName@
-->
<profileName>dev</profileName>
</properties>
</profile>
<!--测试环境-->
<profile>
<id>test</id>
<properties>
<profileName>test</profileName>
</properties>
</profile>
<!--生产环境-->
<profile>
<id>prod</id>
<properties>
<profileName>prod</profileName>
</properties>
</profile>
</profiles>
- maven resource插件(位置:build ——> plugins标签下)
<!--
maven resource插件:
功能:主要是操作配置文件相关。
比如用maven中的变量替换项目中配置文件中的占位符
显示指定非maven标准resources目录为resources
-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>2.7</version>
<configuration>
<!-- 指定配置文件中的占位符是@ -->
<delimiters>
<delimiter>@</delimiter>
</delimiters>
<useDefaultDelimiters>false</useDefaultDelimiters>
</configuration>
</plugin>
- 使用maven打包命令打包时启用某个(***)环境的配置
mvn clean package -Dmaven.test.skip=true -P ***
maven打包时指定的-P后的***,可写dev、test、prod
- 命令行运行jar包:
java -jar xxxx.jar
打包时不指定使用哪个环境
- 在pom.xml文件中添加配置(位置:project标签下)
<profiles>
<!--开发环境-->
<profile>
<id>dev</id>
<properties>
<profileName>dev</profileName>
</properties>
<!-- 如果打包时没有指定-P参数,默认使用activeByDefault为true的profile -->
<activation>
<activeByDefault>true</activeByDefault>
</activation>
</profile>
<!--测试环境-->
<profile>
<id>test</id>
<properties>
<profileName>test</profileName>
</properties>
</profile>
<!--生产环境-->
<profile>
<id>prod</id>
<properties>
<profileName>prod</profileName>
</properties>
</profile>
</profiles>
- 使用maven打包命令打包时启用某个(***)环境的配置
mvn clean package
- 命令行运行jar包:
java -jar xxxx.jar