
在 Java Web 开发中,Spring 框架是一个非常流行的选择。而在 Spring 项目里,配置文件起着至关重要的作用,它能帮助我们管理各种环境参数、服务配置等信息。application.yml 是 Spring Boot 项目中常用的一种配置文件,采用 YAML(YAML Ain’t Markup Language)格式,这种格式以简洁易读的特点受到开发者的喜爱。本文将详细介绍 application.yml 的使用方法和技巧。
YAML 是一种人类可读的数据序列化格式,它使用缩进和冒号来表示数据的层次结构,用短横线 - 表示列表项。以下是 YAML 格式的一些基本规则:
: 分隔键和值,键和冒号之间可以有空格。- 表示列表项,每个列表项独占一行。application.yml 的基本使用在 application.yml 中,可以配置一些简单的键值对,例如数据库连接信息:
spring:datasource:url: jdbc:mysql://localhost:3306/mydbusername: rootpassword: 123456driver-class-name: com.mysql.cj.jdbc.Driver
在这个例子中,spring 是一个顶层键,datasource 是 spring 的子键,下面又包含了 url、username、password 和 driver-class-name 等子键。在 Spring 项目中,可以通过 @Value 注解或者 @ConfigurationProperties 注解来获取这些配置值。
如果需要配置一个列表,可以使用 - 来表示列表项,例如配置多个允许的 IP 地址:
allowed-ips:- 192.168.1.100- 192.168.1.101- 192.168.1.102
在 Java 代码中,可以使用 @ConfigurationProperties 注解将这个列表注入到一个 List 类型的属性中:
import org.springframework.boot.context.properties.ConfigurationProperties;import org.springframework.stereotype.Component;import java.util.List;@Component@ConfigurationProperties(prefix = "allowed-ips")public class IpConfig {private List<String> ips;public List<String> getIps() {return ips;}public void setIps(List<String> ips) {this.ips = ips;}}
YAML 格式很适合进行嵌套配置,例如配置多个数据源:
multi-datasources:primary:url: jdbc:mysql://localhost:3306/db1username: rootpassword: 123456driver-class-name: com.mysql.cj.jdbc.Driversecondary:url: jdbc:mysql://localhost:3306/db2username: rootpassword: 123456driver-class-name: com.mysql.cj.jdbc.Driver
在 Java 代码中,可以定义相应的实体类来映射这些配置:
import org.springframework.boot.context.properties.ConfigurationProperties;import org.springframework.stereotype.Component;import java.util.Map;@Component@ConfigurationProperties(prefix = "multi-datasources")public class MultiDatasourceConfig {private Map<String, DatasourceProperties> datasources;public Map<String, DatasourceProperties> getDatasources() {return datasources;}public void setDatasources(Map<String, DatasourceProperties> datasources) {this.datasources = datasources;}}class DatasourceProperties {private String url;private String username;private String password;private String driverClassName;// getters and setterspublic String getUrl() {return url;}public void setUrl(String url) {this.url = url;}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public String getDriverClassName() {return driverClassName;}public void setDriverClassName(String driverClassName) {this.driverClassName = driverClassName;}}
在实际开发中,我们通常需要为不同的环境(如开发环境、测试环境、生产环境)配置不同的参数。Spring Boot 支持使用 application-{profile}.yml 文件来实现多环境配置。
创建 application-dev.yml、application-test.yml 和 application-prod.yml 三个文件,分别用于开发、测试和生产环境。
application-dev.yml:
server:port: 8080
application-test.yml:
server:port: 8081
application-prod.yml:
server:port: 8082
在 application.yml 中指定要激活的环境:
spring:profiles:active: dev
这样,Spring Boot 启动时会加载 application-dev.yml 文件中的配置。
| 配置类型 | YAML 示例 | Java 读取方式 |
|---|---|---|
| 简单键值对 | key: value |
@Value("${key}") 或 @ConfigurationProperties |
| 列表 | - item1<br>- item2 |
@ConfigurationProperties 注入 List |
| 嵌套配置 | parent:<br> child: value |
@ConfigurationProperties 映射实体类 |
| 多环境配置 | application-{profile}.yml |
在 application.yml 中指定 spring.profiles.active |
通过使用 application.yml 配置文件,我们可以方便地管理 Spring 项目的各种配置信息,提高代码的可维护性和灵活性。希望本文能帮助你更好地掌握 application.yml 的使用。