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