希赛考试网
首页 > 软考 > 网络工程师

如何理解springboot配置加载顺序

希赛网 2024-04-25 12:51:09

Spring Boot是一个非常流行的Java Web开发框架,让开发者能够快速构建和部署自己的应用程序。在实际开发中,我们会用到大量的配置文件来配置应用的各个方面,如数据库连接、日志记录、缓存配置等。然而,当有多个配置文件存在时,开发者很容易混淆配置加载的顺序,从而导致应用无法正确启动。本文将从多个角度来探讨Spring Boot配置加载顺序,帮助开发者更好地理解Spring Boot应用的配置文件加载机制。

1.配置文件优先级

在Spring Boot中,配置文件的优先级是非常重要的。Spring Boot的配置文件可以分为两种:应用默认的配置文件和自定义的配置文件。应用默认的配置文件是Spring Boot框架内部提供的,位于classpath:/META-INF/spring-boot-defaults.properties文件中,用于对Spring Boot应用的一些默认配置进行设置。自定义的配置文件则是应用开发者自己编写的,可以放置在classpath的根目录下,或者放置在外部的文件系统中。当存在多个自定义的配置文件时,Spring Boot会按照以下顺序进行加载:

1. 优先加载带有“正式”或“生产”后缀的配置文件,如application-prod.yml或application-prod.properties。

2. 其次加载带有“测试”或“开发”后缀的配置文件,如application-dev.yml或application-dev.properties。

3. 最后加载没有后缀的配置文件,即application.yml或application.properties。

如果存在多个同名的配置文件,如有两个application.yml文件,Spring Boot会以classpath的优先级为准,即先加载本地classpath的配置文件,再加载外部文件系统中的配置文件。

2.不同配置文件的作用

Spring Boot应用的配置文件主要有两种类型:properties和YAML。二者的功能和使用方法非常相似,使用哪种也只是个人喜好。在配置文件中,可以设置数据库连接、web请求、缓存和日志等。下面是一个示例配置文件,以YAML格式为例:

```

# Page Config

page:

# 分页大小

pageSize: 20

# DataSource Config

spring:

# 数据源基本配置

datasource:

url: jdbc:mysql://localhost:3306/test

username: root

password: 123456

driver-class-name: com.mysql.jdbc.Driver

# Logging Config

logging:

# 设置日志级别

level:

com.example: INFO

```

其中,page和logging是自定义的配置项,与Spring Boot框架无关。而spring.datasource则是Spring Boot框架内部默认支持的配置项,用于设置数据源的连接信息。在实际开发中,我们通常会将所有的配置项都放在一个或多个配置文件中,以便于管理和维护。

3. 配置文件引入

在实际开发中,一个应用的配置往往需要包含多个配置文件,以实现不同功能的配置。此时,可以在配置文件中通过`spring.config.import`属性来引入其他的配置文件,它可以引入外部的配置文件,也可以引入应用内部的其他配置文件。例如:

```

spring:

config:

import: classpath:/config/*.yml

```

以上配置项将会引入classpath:/config目录下的所有YAML类型的文件。相对路径和绝对路径也都是支持的。

4. 配置项的优先级

在Spring Boot应用中,配置项有着不同的优先级,当一个配置项被多次定义时,Spring Boot会根据其优先级来确定哪个属性值才是最终生效的。其优先级依次为:

1. 命令行参数:命令行参数的优先级最高,它们会覆盖任何其他的属性。

2. SPEl表达式:Spring里面的表达式语言,可以在运行时计算出属性的值。

3. 系统属性:通过命令行参数传入或通过操作系统环境变量设置的属性。

4. 应用内部的配置文件:例如application.yml和application.properties。

5. 外部的配置文件:例如application.yml和application.properties。

6. 代码中的@PropertySource注解:通过该注解来加载外部的属性文件。其优先级最低,它被称为“落地配置”,意味着它是最终阶段才被加载的属性。

综上所述,当多个配置文件中存在同名的属性时,Spring Boot会根据优先级的顺序来选择哪个属性值生效。

扫码咨询 领取资料


软考.png


网络工程师 资料下载
备考资料包大放送!涵盖报考指南、考情深度解析、知识点全面梳理、思维导图等,免费领取,助你备考无忧!
立即下载
网络工程师 历年真题
汇聚经典真题,展现考试脉络。精准覆盖考点,助您深入备考。细致解析,助您查漏补缺。
立即做题

软考资格查询系统

扫一扫,自助查询报考条件