2-4.yaml数据读取
约 851 字大约 3 分钟
2025-07-15
YAML 文件可以被视为小型数据库,用于存储具有独立名称的数据。
1. 读取单一数据
可以使用 Spring 的 @Value
注解直接读取 YAML 文件中的单个数据。属性名引用格式为 ${一级属性名.二级属性名...}
。

使用 @Value
注解时,需要将其应用于由 Spring 管理的 Bean 的属性上。
2. 读取全部数据
当 YAML 文件中定义的数据量过大时,逐个使用 @Value
注解读取数据会非常繁琐。SpringBoot 提供了一个 Environment
对象,可以将所有 YAML 数据封装到该对象中。

通过自动装配注解 @Autowired
可以将所有 YAML 数据封装到 Environment
对象中。通过 Environment
对象的 getProperty(String)
方法获取属性值,参数为属性名。
3. 读取对象数据
为了更方便地管理和使用数据,可以将一组 YAML 对象数据封装到一个 Java 对象中。
首先,定义一个 Java 对象,并将其声明为一个 Spring Bean。然后,使用 @ConfigurationProperties
注解指定该对象加载 YAML 文件中哪一组配置信息。

@ConfigurationProperties
注解需要指定加载的数据前缀,该前缀下的所有属性将被封装到该对象中。数据属性名需要与 Java 对象的变量名一一对应,以便正确封装数据。

Spring Boot 在绑定配置文件(如 application.yml
或 application.properties
)中的属性时,不要求严格的变量命名匹配。它可以自动识别并转换以下不同的命名风格:
配置格式(YAML/Properties) | Java 字段名 |
---|---|
driver-class-name | driverClassName |
driver_class_name | driverClassName |
driverClassName | driverClassName |
driverclassname | driverClassName |
Spring Boot 会自动将这些风格的名称“松散”地匹配到 Java Bean 中定义的驼峰式字段名上。Spring Boot 使用了 Binder
类来完成配置绑定工作,其中包含了对各种命名风格的解析器,如:
KebabCase
(短横线风格) →driver-class-name
SnakeCase
(下划线风格) →driver_class_name
CamelCase
(驼峰命名) →driverClassName
这些都会在底层通过转换规则统一成驼峰命名,然后映射到 Java 类的字段上。继续深入了解可以查看 Spring Boot 的官方文档中关于 Relaxed Binding 的部分。
4. YAML 文件中的数据引用
在编写 YAML 数据时,如果多个属性具有相同的前缀,可以使用引用格式来定义数据,避免重复书写。如:
center:
dataDir: /usr/local/fire/data
tmpDir: /usr/local/fire/tmp
logDir: /usr/local/fire/log
msgDir: /usr/local/fire/msgDir
则可以定义 baseDir
为共同的前缀:
baseDir: /usr/local/fire
center:
dataDir: ${baseDir}/data
tmpDir: ${baseDir}/tmp
logDir: ${baseDir}/log
msgDir: ${baseDir}/msgDir
使用 ${属性名}
方式引用属性值。
注意: 在书写字符串时,如果需要使用转义字符,需要将数据字符串使用双引号包裹起来。
lesson: "Spring\tboot\nlesson"