• Spring Boot 加载外部配置文件


    Spring Boot 允许你从外部加载配置,这样的话,就可以在不同的环境中使用相同的代码。支持的外部配置源包括:Java属性文件YAML文件环境变量命令行参数

    @Value注解可以将属性值直接注入到beans中。命令行参数以 -- 开头

    配置文件加载的顺序如下:

    1. Application properties packaged inside your jar (application.properties and YAML variants)
    2. Profile-specific application properties packaged inside your jar (application-{profile}.properties and YAML variants)
    3. Application properties outside of your packaged jar (application.properties and YAML variants)
    4. Profile-specific application properties outside of your packaged jar (application-{profile}.properties and YAML variants)

    应用程序启动的时候,Spring Boot 会自动从以下位置查找并加载 application.propertiesapplication.yaml 文件:

    1. The classpath root
    2. The classpath /config package
    3. The current directory
    4. The /config subdirectory in the current directory
    5. Immediate child directories of the /config subdirectory

    查找顺序按优先级来,后面的可以覆盖前面的。文件中的每一项会作为PropertySources被添加到Spring Environment

    如果你不想用"application"作为配置文件名称,可以在环境属性中通过spring.config.name来指定。还可以使用spring.config.location来显式指定配置文件的位置(文件路径或目录用逗号分隔)

    注意,spring.config.name 和 spring.config.location 必须定义为一个环境属性(通常是一个OS环境变量、一个系统属性或一个命令行参数)

    如果 spring.config.location 指定的是一个目录,那么必须以 / 结尾

    无论直接指定文件还是包含在目录中,配置文件必须在其名称中包含文件扩展名。通常,扩展名支持 .properties, .yaml, .yml

    举个栗子

    指定单个文件

    $ java -jar myproject.jar --spring.config.name=myproject

    指定多个位置

    $ java -jar myproject.jar --spring.config.location=optional:classpath:/default.properties,optional:classpath:/override.properties

    默认情况下,如果指定的位置不存在,则会报错。如果你不确定它是否存在,使用使用 optional: 前缀

    例如:

    optional:classpath:/custom-config/,optional:file:./custom-config/

    Profile Specific Files

    Spring Boot 会尝试加载按照命名规约 application-{profile} 的文件,我们把这样的文件称为Profile-specific文件。

    例如,如果你激活了一个名称为prod的profile,并且使用YAML文件,那么 application.ymlapplication-prod.yml 都会被尝试加载。

    Profile-specific文件必须要和application.properties在相同的位置,而且profile-specific文件中的配置项会覆盖非profile-specific文件中相同的配置项。如果有多个profile-specific文件被激活,则后面会覆盖前面的。

    举个例子,假设spring.profiles.active=prod,live,那么application-prod.properties中的配置项会被application-live.properties中的同名配置项覆盖。如果没有明确指定激活哪个profile,则application-default会被考虑激活。

    YAML 文件

    考虑下面的配置文件

    hello:
      world: "hehe"
    
    my:
      roles:
        - "admin"
        - "guest"

    转换成properties文件应该是:

    hello.world=hehe
    my.roles[0]=admin
    my.roles[1]=guest

    Spring Framework提供了两个方便的类,可以用来加载YAML文档。YamlPropertiesFactoryBean 将 YAML 作为 Properties 加载,而 YamlMapFactoryBean 将 YAML 作为一个 Map 加载。

    可以用@Value注解将属性值注入到bean中

    @Value("${hello.world}")
    private String wahaha;
    
    @Value("${my.roles[1]}")
    private String roles1;

    划重点

    1、支持四种外部配置源:Java属性文件、YAML文件、环境变量、命令行参数;
    2、配置文件查找位置,依次为:
      (1) classpath 根路径
      (2) classpath 根路径下config目录
      (3) jar包当前目录
      (4) jar包当前目录的config目录
      (5) /config子目录的直接子目录
    3、配置文件加载顺序:
      (1) 当前jar包内部的application.properties和application.yml
      (2) 当前jar包内部的application-{profile}.properties 和 application-{profile}.yml
      (3) 引用的外部jar包的application.properties和application.yml
      (2) 引用的外部jar包的application-{profile}.properties 和 application-{profile}.yml
    4、后面的可以覆盖前面的同名配置项

    https://docs.spring.io/spring-boot/docs/current/reference/html/spring-boot-features.html#boot-features-external-config-files

  • 相关阅读:
    DB2中的系统表SYSIBM.SYSDUMMY1
    关于用POI和EXCEL交互的问题
    JavaScript encodeURI() 函数
    JDBC自动提交和批处理操作
    JSP页面的异常处理<转>
    一篇故事讲述了计算机网络里的基本概念:网关,DHCP,IP寻址,ARP欺骗,路由,DDOS等...
    关于form.item不兼容的问题
    eclipse中tomcat内存溢出问题,报PermGen space
    IBM Websphere 说明文档
    css004 用样式继承节省时间
  • 原文地址:https://www.cnblogs.com/cjsblog/p/13986846.html
Copyright © 2020-2023  润新知