• SpringBoot扩展接口-加载环境配置属性源


    SpringBoot启动过程中

    会在PrepareEnviroment()方法中进行上下文环境的准备

    即,进行 StandardServletEnvironment 的初始化配置,内部有一个配置属性列表:List<PropertySource<?>> propertySourceList

    默认会添加系统环境参数,系统JVM参数,还有命令行参数等属性源。

    提供了扩展环境属性源的接口:

    在ApplicationEnvironmentPreparedEvent环境准备完成事件中

    调用EnvironmentPostProcessor接口

      SpringBoot的配置文件加载就是通过这个接口实现类 ConfigFileApplicationListener 完成配置文件的加载

    默认配置文件加载顺序:

    --spring.config.location指定加载配置文件, 当这个参数没指定时,才会按照下面顺序默认加载配置文件

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

     还有一个配置文件加载方式是:

    当进行bean定义解析时,如果有@PropertySource注解标记,则会新增一个配置属性源到Environment环境属性源中。 

     
    如果想要自定义规则加载配置文件属性
    方法1:
    实现EnvironmentPostProcessor接口
    然后在META-INF/spring.factories添加相应配置

    参考资料:
    SpringBoot扩展点之EnvironmentPostProcessor
     
    方法2、
    自定义@PropertySource配置bean,加载指定配置文件到Environment环境属性源中。
    这个方式指定的配置源,优先级是最低的
     
    方法3、
    PropertySourceLoader 接口 (不推荐)
    自定义配置文件加载器,自己解析配置文件属性,
    比如解析.json后缀的配置文件属性到系统中
    参考链接:https://blog.csdn.net/catoop/article/details/71157986

    配置在META-INF/spring.factories文件中配置方式

    # PropertySource Loaders
    org.springframework.boot.env.PropertySourceLoader=
    org.springframework.boot.env.PropertiesPropertySourceLoader,
    org.springframework.boot.env.YamlPropertySourceLoader
     
     
     
    配置属性源优先级从高到低
    链接:https://blog.csdn.net/z_ssyy/article/details/105347680
    ===================SpringBoot也可以从以下位置加载配置; 优先级从高到低;高优先级的配置覆盖低优先级的配置,所有的配置会形成互补配置======================
    1.命令行参数
    所有的配置都可以在命令行上进行指定
    java -jar spring-boot-02-config-02-0.0.1-SNAPSHOT.jar --server.port=8087 --server.context-path=/abc
    多个配置用空格分开; --配置项=2.来自java:comp/env的JNDI属性
    3.Java系统属性(System.getProperties())
    4.操作系统环境变量
    5.RandomValuePropertySource配置的random.*属性值
     
    ==由jar包外向jar包内进行寻找;==(*.properties>*.yml)
    ==优先加载带profile==
    6.jar包外部的application-{profile}.properties或application.yml(带spring.profile)配置文件
    7.jar包内部的application-{profile}.properties或application.yml(带spring.profile)配置文件
     
    8.--spring.config.location=C:/application.properties(它在这里)
     
    ==再来加载不带profile==
    9.jar包外部的application.properties或application.yml(不带spring.profile)配置文件
    10.jar包内部的application.properties或application.yml(不带spring.profile)配置文件
     
    11.@Configuration注解类上的@PropertySource
    12.通过SpringApplication.setDefaultProperties指定的默认属性

    作者:海绵般汲取
    出处:https://www.cnblogs.com/gne-hwz/
    版权:本文版权归作者和博客园共有
    转载:欢迎转载,但未经作者同意,必须保留此段声明;必须在文章中给出原文连接;否则必究法律责任
  • 相关阅读:
    门面模式简述
    转:日志组件logback的介绍及配置使用方法
    spring boot项目中使用sfl4j+logbak配置
    druid相关资料
    spring boot +druid数据库连接池配置
    设计模式之Strategy模式
    转:高效代码审查的八条准则和十个经验
    SpringMVC如何解决POST请求中文乱码问题,GET的又如何处理呢?
    【其它】关于本博客的一些说明
    [THUWC2020] 自爆记
  • 原文地址:https://www.cnblogs.com/gne-hwz/p/15292789.html
Copyright © 2020-2023  润新知