在 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/mydb
username: root
password: 123456
driver-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/db1
username: root
password: 123456
driver-class-name: com.mysql.cj.jdbc.Driver
secondary:
url: jdbc:mysql://localhost:3306/db2
username: root
password: 123456
driver-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 setters
public 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
的使用。