SpringBoot-5-多环境切换配置及内外部配置文件位置的加载

SpringBoot --> 五、多环境切换配置及内外部配置文件位置的加载

ref. 狂神说

5. 多环境切换及配置文件位置加载顺序

5.1 多环境切换配置

profile是Spring对不同环境提供不同配置功能的支持,可以通过激活不同的环境版本,实现快速切换环境。

5.1.1 多配置文件
  • 在主配置文件编写的时候,文件名可以是application-{profile}.properties/yml,用来指定多个环境版本;如:

    • application-test.properties代表测试环境配置文件

    • application-dev.properties代表开发环境配置文件

    • application-prod.properties代表生产环境配置文件

  • SpringBoot默认启动命名为application.properties的主配置文件,因此需要通过一个配置让SpringBoot启动所选中的环境配置文件。比如指定使用dev环境:

    spring.profiles.active=dev
    

一个简单的测试

  1. 分别新建配置文件application-test.propertiesapplication-dev.properties,分别配置不同的端口号进行测试;

    application-dev.properties

    server.port=8555
    

    application-test.properties

    server.port=8080
    
  2. 在主配置文件application.properties中分别配置指定环境激活测试

    spring.profiles.active=test
    

    启动应用查看:

    在这里插入图片描述

  3. 切换另一个环境再次测试

    spring.profiles.active=dev
    

    在这里插入图片描述

5.1.2 yaml多文档块
  • 使用yaml配置文件也可以像上述properties这种方式创建多个application-{profile}.yml配置多环境;

  • yaml也可以使用单个文件配置多环境,使用---把配置文件分割为多文档块;比如:

    application.yml

    # 默认配置
    server:
      port: 8080
    # 切换激活不同环境
    spring:
      profiles:
        active: prod
    
    ---
    # 测试环境
    server:
      port: 8081
    spring:
      config:
        activate:
          on-profile: test
    
    ---
    # 开发环境
    server:
      port: 8555
    spring:
      config:
        activate:
          on-profile: dev
    
    ---
    # 生产环境
    server:
      port: 8083
    spring:
      config:
        activate:
          on-profile: prod
    
  • 注意:在Spring2.4以后在配置特定环境时,使用spring: profiles: {profile}提示被弃用了:

    在这里插入图片描述

    因此修改为以下写法:

    spring:
      config:
        activate:
          on-profile: test
    

如果yml和properties同时都配置了端口,并且没有激活其他环境 ,默认会使用properties配置文件的!

5.2 配置文件位置的加载顺序

application.properties/yml作为SpringBoot项目的全局配置文件。可以通过application-{profile}.properties/yml来配置多环境切换。到目前为止,这些配置文件都放在指定位置classpath:/下生效的,即resources/目录下。SpringBoot项目启动时还可以加载其他位置的配置文件,如下介绍。

5.2.1 内部配置文件
  • 全局配置文件放在项目如下路径,这些都属于项目的内部配置文件,都可以被SpringBoot加载到:

    1. file:./config/
    2. file:./
    3. classpath:/config/
    4. classpath:/
  • 以上这四种路径下的配置文件,加载的优先级由高到低,都可以被SpringBoot加载到。相同配置的话,高优先级会覆盖低优先级;不同配置的话,它们之间互补都有效。

  • 四个路径在项目中的具体位置,以yaml为例,示例如下:

    在这里插入图片描述

  • 以上四种路径下的配置文件application.properties优先级都要大于application.yml,如果在不同的目录中存在多个配置文件,它的读取顺序如下:

    1. config/application.properties(项目根目录中config目录下file:./config/
    2. config/application.yml
    3. application.properties(项目根目录下file:./
    4. application.yml
    5. resources/config/application.properties(项目resources目录中config目录下classpath:/config/
    6. resources/config/application.yml
    7. resources/application.properties(项目的resources目录下classpath:/
    8. resources/application.yml
  • 注意!使用Maven打包项目时,Maven不会把 src目录外的内容打到 jar 包之内,所以导致 file:./config/file:./这两种方式的配置不生效。此时这种情况,可以通过 --spring.config.location命令参数的方式来指定配置文件的新位置:

    java -jar .\hello-0.0.1-SNAPSHOT.jar --spring.config.location=E:/JavaAno/code/springBoot/
    springboot-01-hello/config/application.yml
    
5.2.2 外部配置文件
  • SpringBoot也可以从项目外部位置加载配置文件,优先级由高到低:

    1. 命令行参数;

      所有的配置都可以在命令行上进行指定,多个配置用空格分开;配置项=值

      // 示例
      java -jar .\hello-0.0.1-SNAPSHOT.jar --server.port=8087 --server.context-path=/hello
      
    2. 来自java:comp/env的NDI属性;

    3. Java系统属性(System.getProperties() );

    4. 操作系统环境变量;

    5. RandomValuePropertySource配置的random.*属性值;

    6. jar包内外部的配置文件;

      优先级由高到低:

      1. jar包外部的application-{profile}.properties/yml(带spring.profile)配置文件
      2. jar包内部的application-{profile}.properties/yml(带spring.profile)配置文件
        再来加载不带profile
      3. jar包外部的application.properties/yml(不带spring.profile)配置文件
      4. jar包内部的application.properties/yml(不带spring.profile)配置文件

      jar包外部的配置文件需和jar包在同一个路径文件下

      • 一个示例:

      在这里插入图片描述

      这种方式直接通过java -jar xxx.jar的方式启动,不需要额外添加–参数了,如果需要启动指定环境,则需要将该环境配置文件添加到同一目录下,同时在全局配置文件application.properties/yml中配置spring.profiles.active=profileName

    7. @Configuration注解类上的propertySource;

    8. 通过SpringApplication.setDefaultProperties指定的默认属性。

  • 参考官网Spring Boot Reference Guide

    在这里插入图片描述

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值