Spring Boot 通过 SpringApplication
类及其底层的 Environment
抽象来读取和解析 application.yml
文件中的配置。下面是 Spring Boot 如何读取 yml
文件配置的简化过程:
1. 加载 application.yml
文件
- Spring Boot 启动时,
SpringApplication
类会自动加载位于src/main/resources
目录下的application.yml
文件。 - Spring Boot 使用
SnakeYAML
库来解析.yml
文件的内容。
2. 将 yml
文件内容加载到 Environment
中
- 解析
.yml
文件后,Spring Boot 会将配置属性存储在Environment
对象中。Environment
是一个核心接口,Spring 使用它来获取不同来源的配置属性。
3. 属性转换与绑定
- Spring Boot 提供了一个强大的类型绑定机制,能够将
yml
文件中的配置属性自动绑定到 Java 类的字段中。 - 通过使用
@ConfigurationProperties
注解,你可以将配置属性绑定到自定义的 Java 类。
例如,假设你有以下 application.yml
文件:
myapp:
datasource:
url: jdbc:mysql://localhost:3306/mydb
username: root
password: password
你可以创建一个 Java 类来接收这些配置:
@Component
@ConfigurationProperties(prefix = "myapp.datasource")
public class DataSourceConfig {
private String url;
private String username;
private String password;
// Getters and Setters
}
- Spring Boot 会自动将
myapp.datasource
下的属性值绑定到DataSourceConfig
类的相应字段中。
4. 读取单个配置值
- 你也可以通过
@Value
注解直接读取单个配置值:
@Value("${myapp.datasource.url}")
private String dataSourceUrl;
- 这种方法通常用于简单的配置读取。
5. 优先级与覆盖
- Spring Boot 支持从多个源加载配置(例如,
application.yml
、application.properties
、环境变量、命令行参数等)。这些配置源有不同的优先级,后加载的配置会覆盖前加载的配置。 - Spring Boot 默认优先加载
application.properties
文件,但你可以通过命令行参数或其他方法指定不同的配置文件。
6. 使用 Profile 来实现环境隔离
-
Spring Boot 支持使用
profile
来管理不同环境下的配置。你可以创建多个application-{profile}.yml
文件,并在启动时指定使用哪个profile
。 -
例如,有
application-dev.yml
和application-prod.yml
文件。你可以通过以下方式指定使用prod
配置:java -jar myapp.jar --spring.profiles.active=prod
总结
Spring Boot 通过 SpringApplication
类加载 yml
文件并使用 SnakeYAML
解析它。解析后的属性被存储在 Environment
对象中,并且可以通过 @ConfigurationProperties
和 @Value
注解将这些属性绑定到 Java 类的字段中。这一机制使得 Spring Boot 应用程序能够灵活、简单地管理配置。