配置文件详解
# 配置文件详解
# 优先级顺序
在 Spring Boot 中,配置文件的优先级顺序是:application-{profile}.yml
(application-{profile}.properties
) > application.yml
(application.properties
) > bootstrap.yml
(bootstrap.properties
)。其中,{profile}
表示不同的环境配置,如 dev
、test
、prod
等。
优先级从高到低,高优先级的配置覆盖低优先级的配置,所有的配置会形成互补配置。
# 加载顺序
在 Spring Boot 中,配置文件的加载顺序是按照以下规则:
- bootstrap.yml 或 bootstrap.properties: 这是最先加载的配置文件,用于配置应用程序上下文的基础设施,例如外部配置源和加密/解密。
- application.yml 或 application.properties: 这是主配置文件,包含应用程序的常规配置。
- application-{profile}.yml 或 application-{profile}.properties: 针对不同的环境(profile)加载相应的配置文件。例如,
application-dev.yml
用于开发环境,application-prod.yml
用于生产环境。
在加载配置文件时,Spring Boot 会按照上述顺序依次查找并加载相应的配置项。
当存在相同名称的配置项时,
后加载的配置文件会覆盖之前加载的相同键名的配置项。这种顺序保证了较高优先级的配置文件可以覆盖较低优先级的配置,实现了灵活的配置管理。
# bootstrap.yml 和 application.yml 有什么区别?
bootstrap.yml
和 application.yml
都是 Spring Boot 项目中常用的配置文件。它们之间的主要区别如下:
用途不同:
bootstrap.yml
文件主要用于配置 Spring Boot 应用程序的启动参数,例如数据库连接、服务器端口等。这些参数在应用程序启动时需要设置,因此将它们放在bootstrap.yml
文件中。application.yml
文件用于配置 Spring Boot 应用程序的全局参数,例如日志级别、缓存策略等。这些参数在应用程序运行时可以更改,但一旦更改,所有使用这些参数的地方都会受到影响,因此将它们放在application.yml
文件中。
内容不同:
bootstrap.yml
文件通常包含一些硬编码的配置值,例如数据库连接 URL、服务器端口等。这些值在应用程序启动时需要设置,因此将它们放在bootstrap.yml
文件中。application.yml
文件通常包含一些可配置的值,例如日志级别、缓存策略等。这些值在应用程序运行时可以更改,但一旦更改,所有使用这些值的地方都会受到影响,因此将它们放在application.yml
文件中。
顺序不同:
bootstrap.yml
文件在application.yml
文件之前加载,因此在application.yml
文件中定义的配置值会覆盖bootstrap.yml
文件中相同的配置值。
总之,bootstrap.yml
文件主要用于配置应用程序的启动参数,而 application.yml
文件用于配置应用程序的全局参数。在实际项目中,可以根据需要选择使用哪个文件或者同时使用两个文件。
Spring Boot 项目可能不会直接使用 bootstrap.yml,但是在 Spring Cloud 项目中会使用它来定义一些与 Spring Cloud 组件相关的额外配置,例如服务发现和配置服务器等。
# 实际应用场景
在实际项目中,通常有一些推荐的最佳实践,例如:
- 数据库连接信息等启动时必需的配置项可能放在
bootstrap.yml
。 - 应用程序级别的配置项、日志级别、缓存策略等放在
application.yml
。
但是,有些项目也可能不用 bootstrap.yml
,而是采用 Nacos 配置中心或者命令行运行参数进行配置。这种灵活性使得开发团队能够根据实际需求选择最适合项目的配置方式,从而更好地适应不同的环境和应用场景。
# 占位符的写法
例如在 application.yml
里这样的一段配置:
spring:
application:
name: @artifactId@
cloud:
nacos:
username: @nacos.username@
password: @nacos.password@
2
3
4
5
6
7
解释:
在这里,@artifactId@
是一个占位符,通常在 Maven 或 Gradle 构建项目时会被实际的项目名称替换。
具体的值在 pom.xml
中会有配置
如下所示:
<!-- 环境标识,需要与配置文件的名称相对应 -->
<profiles.active>dev</profiles.active>
<nacos.username>nacos</nacos.username>
<nacos.password>nacos</nacos.password>
2
3
4
# 学习参考
SpringBoot配置文件加载顺序_springboot配置加载顺序正确的是-CSDN博客 (opens new window)