Spring Boot 文章目录
Spring Boot 加载文件的优先级,如何加载配置文件
如何使用SpringBoot全局异常处理?有效提升开发效率
前言
当 Spring Boot 启动时,会调用 SpringApplication.run() 方法创建一个 ApplicationContext 容器,并加载配置文件。
一、代码流程
-
创建 Environment:Spring Boot 首先会创建一个 Environment 对象,用于保存应用程序的配置信息。Environment 包含多个 PropertySource,每个 PropertySource 都代表一个配置源。
-
加载默认配置:Spring Boot 会加载默认的配置文件,如 application.properties 和
application.yml,将它们包装成一个 PropertySource,并添加到 Environment 中。 -
加载外部配置:Spring Boot 会扫描指定的配置文件路径,加载所有匹配的配置文件,将它们包装成一个PropertySource,并添加到 Environment 中。可以通过设置 spring.config.name 和
spring.config.location 属性来指定配置文件名和路径。 -
加载命令行参数:如果启动命令中包含 --spring.config.name 和 --spring.config.location
参数,则会使用这些参数覆盖之前加载的配置文件。 -
加载环境变量:Spring Boot 会加载系统环境变量中以 SPRING_ 开头的变量,并将它们添加到 Environment 中。
-
加载 JNDI:如果应用程序使用 JNDI 技术管理配置,则会加载 JNDI 中的配置项,并将它们添加到 Environment 中。
-
合并配置:Spring Boot 将所有的配置信息合并成一个统一的 PropertySource,形成一个完整的配置信息。
-
构建 ApplicationContext:根据配置信息创建 ApplicationContext 容器,并将所有的 Bean
定义加载到容器中。
二、配置文件的加载顺序
-
命令行参数:使用 java -jar 命令启动时,可以使用 --spring.config.name 和 --spring.config.location 选项指定配置文件名和路径。
-
来自操作系统的环境变量:通过环境变量 SPRING_CONFIG_NAME 和 SPRING_CONFIG_LOCATION
来指定配置文件名和路径。 -
JNDI:如果使用 JNDI 技术管理应用程序的配置,可以使用 java:comp/env/spring.config.name 和
java:comp/env/spring.config.location 分别指定配置文件名和路径。 -
Java 系统属性:可以通过设置 System 属性 spring.config.name 和
spring.config.location 来指定配置文件名和路径。 -
配置文件:默认情况下,Spring Boot 会在以下位置查找配置文件:
-
当前工作目录下的 /config 子目录 当前工作目录 classpath 下的 /config 包 classpath 根目录
默认配置:Spring Boot 内置了一些默认配置,如 application.properties 和
application.yml,如果没有指定其他配置文件,则会使用这些默认配置。
需要注意的是,如果存在多个配置文件,它们会被合并成一个配置文件。例如,如果同时存在 application.properties 和 application.yml 文件,则它们的配置项会被合并到一个统一的配置文件中。同时,如果多个配置项具有相同的属性名,后面的配置文件中的值会覆盖前面的配置文件中的值。
总结
以上就是便是springboot加载配置文件的全部流程,有不清楚的可以在评论区沟通。