Spring Boot————YAML配置文件

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/u014745069/article/details/83892978

引言

首先,YAML并不是仅仅可以使用在Java项目中,它是一种类似于json结构的标记语言,可以为所有的编程语言服务。它强调更直观的层级表示,比较适合描述配置文件中的层级关系。

Spring Boot可以识别后缀名为".properties"或“.yaml”或“.yml” 的全局配置文件。以yaml或yml为后缀的配置文件都是YAML文件。

一、与其他配置格式的比较

与其他配置文件的格式比较,yaml的表达方式既有直观突出的层级结构,同时又不会冗余重复:

.properties配置方式:

 .xml配置方式:

.yml配置方式:

 不难看出,兼顾层级结构而又简洁明快的配置方式当然YAML是最好的选择。

二、YAML基本语法

2.1 表达式

YAML用一个键值对来表示每个属性(大小写敏感),类似于json但却不需要大括号,用冒号分割Key和Value的同时需要在冒号后面加入一个强制的空格

key: value

举例:

2.2 层级表示

YAML采用换行并缩进的方式来表达父节点与子节点、对象与属性之间的关系,同级的节点或属性要严格保证相同的缩进:

2.3 字面量的表示

字面量包括数字、字符串、布尔值等,YAML中可以直接书写字面量,而且一般的字符串不需要加任何引号。而引号的使用一般与特殊字符有关:双引号不会转义特殊字符;单引号会转义特殊字符。比如字符串中包含 \n ,双引号识别为换行,单引号会识别为 \n 。

2.4 对象的表示

YAML为对象的表示提供了两种表达方式:层级缩进、行内表达

层级缩进如2.2所示只需要缩进保持对齐,就可以完整的表达一个对象。另一种行内表达的方式如下:

和JSON结构体类似,不过需要注意强制空格,和不加引号。

2.5 数组或List

同样有两种写法:层级缩进和行内表达。

层级缩进的方式,因为属性的值是多个,所以与一般的属性定义略有不同,每个元素换行缩进之后需要在前面加一个短横线 - ,然后强制空格

行内表达的方式,注意是中括号 [ ] :

三、获取配置文件(不限于YAML)中的值

Spring Boot默认使用SnakeYAML解析YAML文件。

使用配置文件的时候,除了修改Spring Boot提供的默认配置以外(如修改端口),我们还可以在配置文件中定义完全属于自己的对象,比如一个全局唯一的管理员对象

Administrator: 
    name: Morty
    age: null
    gender: MALE
    role: admin
    permission: all

定义JavaBean,并使用注解@ConfigurationProperties。

测试:

@RunWith(SpringRunner.class)
@SpringBootTest
public class AdminTest {
	
	@Autowired
	private Admin admin;

	@Test
	public void test() {
		System.out.println("管理员:" + admin);
	}
}

执行结果:

另外,除了@ConfigurationProperties注解之外,单独取得某个值还可以使用@Value,它们之间的区别:

关于@ConfigurationProperties和@Value 两个注解之间详细的区别,参考《Spring Boot————@ConfigurationProperties与@Value》。

当然,业务开发中采用在配置文件中定义实体bean的方式是比较愚蠢的。所以,在大多数应用开发场景中,@Value要比@ConfigurationProperties注解用途更广。然而在Spring Boot的自动配置原理中(参见《Spring Boot面试杀手锏————自动配置原理》),Spring Boot就是使用@ConfigurationProperties完成从配置文件到XxxxProperties对象的映射绑定的,因此,理解这种批量导入属性的方式是有必要的。

综上,就是关于YAML配置文件语法的简单讲解和Spring Boot从配置文件中的取值方式,欢迎各位看官文末留言。

展开阅读全文

没有更多推荐了,返回首页