SpringBoot多环境配置

profiles部分参考自:蚩尤后裔

profiles配置多环境

需求分析:
Profile 是 Spring 对不同环境提供不同配置功能的支持,可以通过激活、指定参数等方式快速切换环境;
项目开发时有开发环境、测试环境、部署环境等,可以通过 profile 配置切换

多profile文件形式

格式:application-{profile}.yml

  • Spring Boot 默认都是从全局配置文件 application.properties 和 application.yml 进入开始读取
  • 可以使用约定格式“application-{profile}.properties/yml”写任意多的配置文件
  • 然后在全局配置文件 application.properties 和 application.yml 激活它们即可,使用“spring.profiles.active=xxx”
    1
    2
    3
    使用命令启动的话:
    java -jar eureka-study-1.0-SNAPSHOT.jar --spring.profiles.active=eureka3

    yml文档块形式

  • yml 文件支持多文档块方式,同一个yml文件中,可以使用”—“来区分不同的文档,相当于不同的配置文件
  • 这也是Spring Boot官方推荐的方式
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    spring:
    profiles:
    active: eureka1
    ---
    spring:
    application:
    name: spring-cloud-eureka
    profiles: eureka1
    server:
    port: 8000
    eureka:
    instance:
    hostname: eureka1
    client:
    serviceUrl:
    defaultZone: http://eureka2:8001/eureka/,http://eureka3:8002/eureka/
    ---
    spring:
    application:
    name: spring-cloud-eureka
    profiles: eureka2
    server:
    port: 8001
    eureka:
    instance:
    hostname: eureka2
    client:
    serviceUrl:
    defaultZone: http://eureka1:8000/eureka/,http://eureka3:8002/eureka/
    ---
    spring:
    application:
    name: spring-cloud-eureka
    profiles: eureka3
    server:
    port: 8002
    eureka:
    instance:
    hostname: eureka3
    client:
    serviceUrl:
    defaultZone: http://eureka1:8000/eureka/,http://eureka2:8001/eureka/
    ---
    spring:
    application:
    name: sinle-eureka
    cloud:
    config:
    enabled: false
    profiles: single
    server:
    port: 8761
    eureka:
    instance:
    hostname: localhost
    server:
    enable-self-preservation: false
    eviction-interval-timer-in-ms: 5000 # 设置注册表的清理间隔(默认是60 * 1000 毫秒)。单位:毫秒
    client:
    fetch-registry: false
    register-with-eureka: false
    service-url:
    defalutZone: http://${eureka.instance.hostname}:${server.port}/eureka/

    Maven配置多环境

    文件目录:
    文件目录:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    <!--定义不同环境-->
    <profiles>
    <!-- 对外服务层 -->
    <profile>
    <!-- 本地开发环境 -->
    <id>external-dev</id>
    <properties>
    <!-- 配置文件的路径 -->
    <profiles.active>/yml/external/dev</profiles.active>
    </properties>
    <activation>
    <!--默认是本地开发环境 -->
    <activeByDefault>true</activeByDefault>
    </activation>
    </profile>
    <profile>
    <!-- 测试环境 -->
    <id>external-test</id>
    <properties>
    <profiles.active>/yml/external/test</profiles.active>
    </properties>
    </profile>
    <profile>
    <!-- 预发布 -->
    <id>external-pre</id>
    <properties>
    <profiles.active>/yml/external/pre</profiles.active>
    </properties>
    </profile>
    <profile>
    <!-- 生产环境 -->
    <id>external-www</id>
    <properties>
    <profiles.active>/yml/external/www</profiles.active>
    </properties>
    </profile>

    <!-- 对内服务层 -->
    <profile>
    <!-- 本地开发环境 -->
    <id>internal-dev</id>
    <properties>
    <profiles.active>/yml/internal/dev</profiles.active>
    </properties>
    </profile>
    <profile>
    <!-- 测试环境 -->
    <id>internal-test</id>
    <properties>
    <profiles.active>/yml/internal/test</profiles.active>
    </properties>
    </profile>
    <profile>
    <!-- 预发布 -->
    <id>internal-pre</id>
    <properties>
    <profiles.active>/yml/internal/pre</profiles.active>
    </properties>
    </profile>
    <profile>
    <!-- 生产环境 -->
    <id>internal-www</id>
    <properties>
    <profiles.active>/yml/internal/www</profiles.active>
    </properties>
    </profile>

    <!-- 管理员层 -->
    <profile>
    <!-- 本地开发环境 -->
    <id>manage-dev</id>
    <properties>
    <profiles.active>/yml/manage/dev</profiles.active>
    </properties>
    </profile>
    <profile>
    <!-- 测试环境 -->
    <id>manage-test</id>
    <properties>
    <profiles.active>/yml/manage/test</profiles.active>
    </properties>
    </profile>
    <profile>
    <!-- 预发布 -->
    <id>manage-pre</id>
    <properties>
    <profiles.active>/yml/manage/pre</profiles.active>
    </properties>
    </profile>
    <profile>
    <!-- 生产环境 -->
    <id>manage-www</id>
    <properties>
    <profiles.active>/yml/manage/www</profiles.active>
    </properties>
    </profile>
    </profiles>

    <build>
    <resources>
    <resource>
    <!-- 该目录下与通配符匹配的文件将不会生成到classes目录下 -->
    <directory>${basedir}/src/main/resources</directory>
    <!-- 排除标签 -->
    <excludes>
    <!-- yml目录下的文件将不会生成到classes目录下,除非由filtering过滤动态添加的 -->
    <exclude>yml/**</exclude>
    </excludes>
    <filtering>true</filtering>
    </resource>
    <resource>
    <!--
    资源文件位置src/main/resources/,这下面的资源文件的${}会全部被替换成filter中的标签内容。
    directory指定的value会作为classes的资源根目录,
    -->
    <directory>${basedir}/src/main/resources/${profiles.active}</directory>
    <filtering>true</filtering>
    </resource>
    </resources>
    </build>
    在项目打包过程过程中直接使用命令或者直接在maven中打包即可。