Spring Boot —— YAML配置文件

引言

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

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

默认的配置文件的优先级如下:

file:./config/       

file:./              项目根路径下

classpath:/config/

classpath:/      项目resources文件夹下

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

与其他配置文件的格式比较,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

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

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

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

2.6 Map

使用@Value可以实现注入:

@Value("#{${cache.studentAge:null}}")
private Map<String, Integer> studentAge;
cache:
  studentAge: "{morty : 28}"

 注意,map需要用引号将整个结构括起来。我们可以在@Value 中加入默认值 null,这样可以避免在没有配置属性的时候报错,但是一定要记得在程序中判空。

三、获取配置文件(不限于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从配置文件中的取值方式,欢迎各位看官文末留言。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值