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 配置文件

由于各种各样的原因,我们肯定希望打出哪个环境的包,就只需要包含这个环境的配置文件即可,不想包含其他环境的配置文件,这时候可以直接在打包时直接指定环境。

打包时指定使用哪个环境

  1. 在application通用配置文件中使用占位符指定环境
spring.profiles.active=@profileName@

maven打包时指定的***,会自动替换掉这里的占位符【@profileName@】

  1. 在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>
  1. 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>
  1. 使用maven打包命令打包时启用某个(***)环境的配置
mvn clean package -Dmaven.test.skip=true -P ***

maven打包时指定的-P后的***,可写dev、test、prod

  1. 命令行运行jar包:
java -jar xxxx.jar

打包时不指定使用哪个环境

  1. 在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>
  1. 使用maven打包命令打包时启用某个(***)环境的配置
mvn clean package
  1. 命令行运行jar包:
java -jar xxxx.jar