目录
一、什么是yml配置文件?
二、如何在SpringBoot中使用yml配置文件?
三、如何在SpringBoot中注入yml配置文件的属性?
@Value注解
@ConfigurationProperties注解
四、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: Tomage: 20hobbies:- 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对象的属性值@Autowiredprivate 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的语法规则,否则可能会导致配置文件无效或出现错误。