SpringBoot启动过程中

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

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

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

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

 

 

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

在ApplicationEnvironmentPreparedEvent环境准备完成事件中

调用EnvironmentPostProcessor接口

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

 

默认配置文件加载顺序:

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



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


SpringBoot扩展接口-加载环境配置属性源_jar包_02

 

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

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


 


如果想要自定义规则加载配置文件属性


方法1:



实现EnvironmentPostProcessor接口



然后在META-INF/spring.factories添加相应配置


参考资料:


SpringBoot扩展点之EnvironmentPostProcessor


​javascript:void(0)​


 


方法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指定的默认属性