目录
四、yml配置文件与properties配置文件的区别和优势
一、什么是yml配置文件?
yml是一种数据序列化语言,它以数据为中心,而不是以标记语言为重点。它使用空格缩进和大量依赖外观的特色,特别适合用来表达或编辑数据结构、各种配置文件、倾印调试内容等。
yml的语法和其他高级语言类似,并且可以简单表达清单、散列表、标量等数据形态。它支持多种数据类型,如对象、数组、纯量等。
yml的基本语法如下:
- 使用冒号(:)表示键值对,冒号后面必须跟一个空格
- 使用短横线(-)表示列表项,短横线后面必须跟一个空格
- 使用缩进表示层级关系,缩进必须使用空格,不能使用制表符(tab)
- 使用井号(#)表示注释,井号后面必须跟一个空格
- 使用三个连续的短横线(—)表示多文档块的开始,可以在一个文件中定义多个环境
- 使用三个连续的句点(…)表示多文档块的结束
例如:
# 这是一个yml配置文件示例
server:
port: 8080 # 端口号
servlet:
context-path: /demo # 上下文路径
spring:
datasource: # 数据源配置
url: jdbc:mysql://localhost:3306/test # 数据库连接地址
username: root # 用户名
password: 123456 # 密码
driver-class-name: com.mysql.cj.jdbc.Driver # 驱动类名
profiles: # 环境配置
active: dev # 激活开发环境
---
# 开发环境配置
spring:
profiles: dev # 环境名称
application:
name: demo-dev # 应用名称
---
# 生产环境配置
spring:
profiles: prod # 环境名称
application:
name: demo-prod # 应用名称
二、如何在SpringBoot中使用yml配置文件?
SpringBoot支持两种格式的配置文件,一种是properties,另一种是yml。默认情况下,SpringBoot会在resources目录下寻找名为application.properties或application.yml的文件作为全局配置文件。
如果想要使用yml格式的配置文件,我们可以在resources目录下创建一个名为application.yml的文件,并按照yml的语法编写我们需要的属性。
如果我们想要使用多个yml配置文件,例如针对不同的环境或功能模块,我们可以在resources目录下创建多个名为application-{profile}.yml的文件,其中{profile}是自定义的环境或模块名称。
例如:
# application.yml 全局配置文件
server:
port: 8080
---
# application-dev.yml 开发环境配置文件
spring:
profiles: dev # 环境名称
datasource:
url: jdbc:mysql://localhost:3306/devdb # 开发数据库地址
---
# application-prod.yml 生产环境配置文件
spring:
profiles: prod # 环境名称
datasource:
url: jdbc:mysql://localhost:3306/proddb # 生产数据库地址
如果我们想要切换不同的环境或模块,我们可以在全局配置文件中指定spring.profiles.active属性,或者在启动参数中添加–spring.profiles.active参数。
例如:
# application.yml 全局配置文件
server:
port: 8080
spring:
profiles:
active: dev # 激活开发环境
或者
java -jar demo.jar --spring.profiles.active=prod # 激活生产环境
三、如何在SpringBoot中注入yml配置文件的属性?
在SpringBoot中,我们可以使用@Value注解或者@ConfigurationProperties注解来注入yml配置文件的属性到我们的Java类中。
@Value注解
@Value注解可以用来注入单个属性,它的语法是@Value(“${属性名}”),其中属性名可以是yml配置文件中定义的任意键值对的键。
例如:
# application.yml 配置文件
server:
port: 8080
name: Tom
age: 20
// DemoController.java 控制器类
@RestController
public class DemoController {
// 注入server.port属性
@Value("${server.port}")
private int port;
// 注入name属性
@Value("${name}")
private String name;
// 注入age属性
@Value("${age}")
private int age;
// 显示属性值
@GetMapping("/show")
public String show() {
return "port: " + port + ", name: " + name + ", age: " + age;
}
@ConfigurationProperties注解
@ConfigurationProperties注解可以用来注入一组属性,它的语法是@ConfigurationProperties(prefix = “前缀”),其中前缀可以是yml配置文件中定义的任意对象的键。
例如:
# application.yml 配置文件
server:
port: 8080
person:
name: Tom
age: 20
hobbies:
- reading
- writing
// Person.java 实体类
@Component // 声明为组件,让Spring容器扫描和管理
@ConfigurationProperties(prefix = "person") // 指定前缀为person
public class Person {
// 定义与yml配置文件中相同的属性名和类型,注意要有getter和setter方法
private String name;
private int age;
private List<String> hobbies;
// getter and setter methods
}
// DemoController.java 控制器类
@RestController
public class DemoController {
// 注入Person实例,它已经自动绑定了yml配置文件中的person对象的属性值
@Autowired
private Person person;
// 显示属性值
@GetMapping("/show")
public String show() {
return "name: " + person.getName() + ", age: " + person.getAge() + ", hobbies: " + person.getHobbies();
}
}
四、yml配置文件与properties配置文件的区别和优势
yml配置文件与properties配置文件都是SpringBoot支持的两种配置文件格式,它们都可以用来定义和管理应用程序的属性。那么,它们有什么区别和优势呢?
区别
- yml配置文件使用冒号(:)表示键值对,properties配置文件使用等号(=)表示键值对。
- yml配置文件使用缩进表示层级关系,properties配置文件使用点号(.)表示层级关系。
- yml配置文件支持多文档块,可以在一个文件中定义多个环境或模块,properties配置文件不支持多文档块,需要创建多个文件来定义多个环境或模块。
- yml配置文件支持多种数据类型,如对象、数组、纯量等,properties配置文件只支持字符串类型。
优势
- yml配置文件更简洁,更易读,更易写,没有冗余的符号和重复的内容。
- yml配置文件更灵活,更强大,可以表达更丰富的数据结构和格式。
- yml配置文件更方便,更高效,可以在一个文件中定义和切换多个配置好的yml文件
五、总结
本文介绍了yml配置文件的语法、特点和使用方法,并与properties配置文件进行了对比,分析了yml配置文件的优势和局限性。我们可以看出,yml配置文件是一种更简洁、更灵活、更方便的配置文件格式,它可以让我们更容易地管理和切换不同环境或模块的配置。当然,yml配置文件也有一些需要注意的地方,如缩进、空格、数据类型等,我们需要遵循yml的语法规则,否则可能会导致配置文件无效或出现错误。