• SpringBoot之多Profile配置


    近来在利用闲暇时间巩固下SpringBoot的基本知识,然后自己也做一些笔记,整理下当时所学知识,后面就干脆写到这里来了。

    多Profile配置文件

    在SpringBoot主配置文件编写的时候,文件名可以是application-{profile}.properties/yml。

    默认使用的是application.properties配置文件的配置。

     1 applicaiton.properties 2 application-dev.properties 3 application-test.properties 4 application-prod.properties 

    激活指定配置文件

    1、主配置文件中指定激活的profile

    如果是properties格式的配置文件,那么可以在主配置文件中这样指定激活的profile:

    spring.profiles.active = dev

    如果是yml格式的配置文件,你可以用“---”来划分文档块,每个文档块都被看作是一个profile,你可以在主文档块中指定生效的profile:

     1 server:
     2   prot: 8081
     3 spring:
     4   profiles:
     5     active: dev # 指定激活哪个配置文件
     6 
     7 # yml格式配置文件中,用三个横线来区分文档块
     8 # 第一个文档块表示主文档块,并同时指定后续生效的是哪个文档块
     9 
    10 ---
    11 # 第二个文档块
    12 server:
    13   port: 8082
    14 spring:
    15   profiles: dev # 声明文档块类型
    16 
    17 ---
    18 # 第三个文档块
    19 server:
    20   port: 8083
    21 spring:
    22   profiles: dev

    2、命令行激活

    在实际生产环境中直接使用命令行启动项目,启动的同时可以指定激活的profile:

    java -jar --spring.profiles.active=dev my-spring-boot-app.1.0.0.jar

    3、设置虚拟机参数激活

    同样,你可以通过设置Java虚拟机参数的方式来激活指定profile:

    [vm options:] -Dspring.profiles.action=dev

    IDEA编辑器设置:

    命令行指定的方式和虚拟机参数设置的方式指定,都可以在IDEA的运行设置中进行配置,如下图:

    加载位置与顺序

    SpringBoot启动会扫描以下位置的application.properties/yml文件作为spring boot的默认配置文件:

    file:./config/
    file:./
    classpath:/config/
    classpath:/

    以上是按照优先级从高到低的顺序,所有位置的文件都会被加载,高优先级配置内容会覆盖低优先级配置的内容,并形成互补配置;当然,我们也可以通过spring.config.location来改变默认配置。

    上面的:

    • file: 指当前项目根目录
    • classpath: 指当前项目的resources目录

    给出一个图例:

    注意:maven打包是不能把src外面的两个application.properties文件打到jar包里的。

    在项目打包好之后,我们可以通过命令行参数的形式,启动项目的时候来指定配置文件的新位置,指定配置文件和默认加载的这些配置文件会共同生效,并形成互补配置。

    这在运维的时候很有用,因为可以通过命令行的方式指定生效的配置文件,较为灵活。

    外部配置

    SpringBoot还支持多种外部配置方式,生效优先级从高到低,高优先级的配置覆盖低优先级的配置,所有的配置形成互补配置

    1. 命令行参数
    2. 来自java:comp/env的JNDI属性
    3. Java系统属性(System.getProperties())
    4. 操作系统环境变量
    5. RandomValuePropertySource配置的ramdom.*属性值
    6. jar包外部的application-{profile}.properties或application.yml(带spring.profile)配置文件
    7. jar包内部的application-{profile}.properties或application.yml(带spring.profile)配置文件
    8. jar包外部的application.properties或application.yml(不带spring.profile)配置文件
    9. jar包内部的application.properties或application.yml(不带spring.profile)配置文件
    10. @Configuration注解类上的@PropertySource
    11. 通过SpringApplication.setDefaultProperties指定的默认属性

    其实在官网有17种这样的配置说明,可以从下面进入:

    https://docs.spring.io/spring-boot/docs/2.1.6.RELEASE/reference/html/boot-features-external-config.html

    重点关注上面列举的1、6、7、8、9这几项,生效的配置文件,都是由jar包外向jar包内进行寻找的,优先加载带profile,再加载不带profile的。比如有个application.properties的配置文件和xxx.jar放置在同一个目录,那么项目启动时一定是先加载这个application.properties文件,再去加载xxx.jar里面的配置文件的。

    参考资料

    1、https://docs.spring.io/spring-boot/docs/2.1.6.RELEASE/reference/html/

  • 相关阅读:
    【TCP】TCP三次握手与四次挥手
    【Spring】@PathVariable 获取带点参数,获取不全
    【异常】Caused by: java.sql.SQLTransientConnectionException: HikariPool-1
    【异常】 FlywayException:Validate failed:Migration checksum mismatch
    Eclipse------启动Server时出现弹窗Server at localhost was unable to start within 45 seconds.
    SpringBoot------集成PageHelper分页功能
    SpringBoot------集成MyBatis
    SpringBoot------thymeleaf的使用
    SpringBoot------全局异常捕获
    SpringBoot------JPA连接数据库
  • 原文地址:https://www.cnblogs.com/captainad/p/11265558.html
Copyright © 2020-2023  润新知