多环境配置
SpringBoot项目目前有两种配置方式:
- SpringBoot项目创建时默认提供的properties文件;
- YAML文件,一般是以
.yml
结尾的文件。
位置:/src/main/resources/
路径下。
两种配置方式的优缺点
对比由OpenAI给出,结合勘误
YAML | Properties | |
---|---|---|
优点 | 语法格式: 使用缩进和冒号来表示层次结构。 可读性强: YAML 使用缩进来表示层级关系,使得配置文件更加清晰易读。 简洁性: 相比于 Properties 文件,YAML 的写法更加简洁,可以减少配置文件的重复性。 支持复杂数据结构: YAML 支持列表、映射等复杂数据结构,可以更方便地表示嵌套关系的配置。 | 语法格式: 使用点号和等号来表示键值对。 简单易用: Properties 配置文件采用键值对的形式,语法简单易懂,容易上手。 支持特殊字符: Properties 配置文件支持特殊字符的写法,不需要进行转义。 |
缺点 | 语法要求严格: YAML 的语法相对复杂,对缩进、冒号等符号的使用有严格的要求,容易出错。 不支持特殊字符: YAML 不支持一些特殊字符的写法,比如冒号、引号等,需要进行转义才能正确表示。 | 不支持复杂数据结构: Properties 配置文件只支持简单的键值对形式,不支持复杂数据结构的表示,不方便表示嵌套关系的配置。 配置文件冗余: Properties 配置文件的写法比较冗余,需要重复写入键名。 |
以YAML文件配置方式
- 多文件配置
application-{profile}.yml,其中 {profile} 表示当前环境的名称 - 单文件配置
使用三个短横杠来分割profile;# 在2.4版本之前 spring: profile: dev --- # 在2.4版本之后 spring: config: activate: on-profile: dev
- springboot配置文件的优先级排序
- @TestPropertySource 注解
- 命令行参数
- Java系统属性(System.getProperties())
- 操作系统环境变量
- 只有在random.*里包含的属性会产生一个RandomValuePropertySource
- 在打包的jar外的应用程序配置文件(application.properties,包含YAML和profile变量)
- 在打包的jar内的应用程序配置文件(application.properties,包含YAML和profile变量)
- 在@Configuration类上的@PropertySource注解
- 默认属性(使用SpringApplication.setDefaultProperties指定)
- 命令行参数、系统变量、环境变量等一些属性可以通过命令行参数来设置