SpringBoot启动过程中
会在PrepareEnviroment()方法中进行上下文环境的准备
即,进行 StandardServletEnvironment 的初始化配置,内部有一个配置属性列表:List<PropertySource<?>> propertySourceList
默认会添加系统环境参数,系统JVM参数,还有命令行参数等属性源。

提供了扩展环境属性源的接口:
在ApplicationEnvironmentPreparedEvent环境准备完成事件中
调用EnvironmentPostProcessor接口
SpringBoot的配置文件加载就是通过这个接口实现类 ConfigFileApplicationListener 完成配置文件的加载
默认配置文件加载顺序:
--spring.config.location指定加载配置文件, 当这个参数没指定时,才会按照下面顺序默认加载配置文件
file:./config/
file:./,
classpath:/config/,
classpath:/,

还有一个配置文件加载方式是:
当进行bean定义解析时,如果有@PropertySource注解标记,则会新增一个配置属性源到Environment环境属性源中。
自定义配置文件加载器,自己解析配置文件属性,
比如解析.json后缀的配置文件属性到系统中
参考链接:https://blog.youkuaiyun.com/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.youkuaiyun.com/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指定的默认属性
SpringBoot配置加载与扩展
本文详细介绍了SpringBoot在启动过程中的配置加载机制,包括PrepareEnviroment阶段的StandardServletEnvironment初始化,以及EnvironmentPostProcessor接口如何用于扩展配置文件加载。SpringBoot默认加载顺序涉及系统环境、JVM参数、命令行参数以及不同路径下的配置文件。同时,可通过实现EnvironmentPostProcessor接口或使用@PropertySource注解来自定义加载规则。配置属性源的优先级从高到低依次为:命令行参数、JNDI属性、系统属性、环境变量、RandomValuePropertySource、配置文件等。
1万+

被折叠的 条评论
为什么被折叠?



