【SpringBoot学习笔记⼆】YAML格式⽂件配置⽅式详解
在初始化的项⽬中有个预置⽂件application.properties,这是SpringBoot的配置⽂件。SpringBoot 默认使⽤以下 2 种全局的配置⽂件,其⽂件名是固定的。
application.properties:SpringBoot的配置⽂件,⽤来修改 Spring Boot ⾃动配置的默认值,语法机构为:key=value
⼤多数情况下我们使⽤的⽂件是l ,所以本篇Blog来详细看下YAML配置⽂件是怎么作⽤的,如何在SpringBoot中使⽤。YAML配置⽂件
YAML 全称 YAML Ain't Markup Language(YAML不是⼀种标记语⾔),它是⼀种以数据为中⼼的标记语⾔,⽐ XML 和 JSON 更适合作为配置⽂件,怎么理解呢?就是这个配置⽂件的内容单纯的就是数据,通过缩进或者简单的特殊符号标识结构,⽐XML的⼀堆标签或者JSON的⼀堆括号更直接和清晰,例如同样的配置,⽤xml:
<server>
<port>8081<port>
</server>
如果⽤yaml标记:
server:
port: 8081
要使⽤ YAML 作为属性配置⽂件(以 .yml 或 .yaml 结尾),需将 SnakeYAML 库添加到 classpath 下,Spring Boot 中的 spring-boot-starter-web 或 spring-boot-starter 都对 SnakeYAML 库做了集成, 只要项⽬中引⽤了这两个 Starter 中的任何⼀个,Spring Boot 会⾃动添加 SnakeYAML 库到 classpath 下。
基本语法
YAML 的基本语法原则有如下两条:
使⽤缩进表⽰层级关系,缩进时不允许使⽤ Tab 键,只允许使⽤空格,空格多少个⽆所谓只要是左边对齐的⼀列数据都是同⼀个层级的
属性和值的⼤⼩写都⼗分敏感
只要满⾜这两条基本的语法,就不会出问题。
常⽤写法
YAML的常⽤写法有三种,字⾯量、对象以及数组,分类进⾏⼀下⽰例
字⾯量
字⾯量是指单个的,不可拆分的值,例如:数字、字符串、布尔值、以及⽇期等,在 YAML 中,使⽤key:[空格]value的形式表⽰⼀对键值对(空格不能省略)
K: V
字⾯量直接写在V的位置就可以 , 字符串默认不⽤加上双引号或者单引号,如果字符串使⽤了单引号或者双引号对特殊字符的规定如下,例如\n本⾝的含义是换⾏操作
双引号,会转义字符串⾥⾯的特殊字符 , 特殊字符会作为本⾝想表⽰的意思:name: "⽥ \n 郭" ,则双引号下转义为换⾏操作:
⽥
郭
单引号,不会转义特殊字符 , 特殊字符最终会变成和普通字符⼀样输出,name: '⽥ \n 郭' ,则输出为:name: '⽥ \n 郭'
⽹上关于转义的操作各种资料存在误解,建议看下译⽂
数组
YAML 使⽤-表⽰数组中的元素,普通写法如下:
pets:
-dog
-cat
-pig
⾏内写法如下:
pets:[dog,cat,pig]
对象
在 YAML 中,对象可能包含多个属性,每⼀个属性都是⼀对键值对,普通写法如下:
person:
name: tml
age:30
⾏内写法如下:
person:{name: tml,age:30}
复合结构
当然我们⼤多数使⽤的时候上述三种写法都会⽤到,复合使⽤:
person:
name: tml
age:30
pets:
-dog
-cat
-pig
car:
name:蔚来es6
YAML组织结构
⼀个 YAML ⽂件可以由⼀个或多个⽂档组成,⽂档之间使⽤---作为分隔符,且各⽂档相互独⽴,互不⼲扰。如果 YAML ⽂件只包含⼀个⽂档,则---分隔符可以省略。
---
person:
name: tml
age:30
pets:
-dog
-cat
-pig
car:
name:蔚来es6
---
person:
name: gcy
age:30
---
但是强烈不建议这么做,我们最好把各个⽂档和⽂件分开来,结构清晰⼀些。
SpringBoot配置绑定
yaml⽂件更强⼤的地⽅在于,他可以给我们的实体类直接注⼊匹配值,也就是我们读取配置再也不⽤那么⿇烦了,还需要写个⽂件读取类什么的,直接通过注解就可以⾃动获取,有两种⽅式:
@ConfigurationProperties配置yaml⾃动JavaBean绑定
@Value配置yaml单个属性值绑定
@Value配置外部配置⽂件属性绑定
接下来通过⼀个实践来体会下这三种配置绑定⽅式。
yaml配置绑定实践
⾸先我们需要编写yaml配置⽂件和⼀个外部配置⽂件,分别看看yaml⾃动配置绑定和外部配置⽂件配置绑定⽅法是什么样的,按照如下结构进⾏实践:
1 yaml配置及外部properties配置编写
person:
name: tml
age:30
pets:
-dog
-cat
-pig
car:
name:蔚来es6
url:
domain: www.baidu
location: china
application.properties配置⽂件内容如下:
spring.application.name=springboot
2 配置注⼊类编写
我们需要编写两个配置注⼊类,分别是Person和Car
Person.java
package;
import AllArgsConstructor;
import Data;
import NoArgsConstructor;
import Value;
import ConfigurationProperties; import PropertySource;
import Component;
import List;
/**
* * @Name Person
* * @Description
* * @author tianmaolin
* * @Data 2021/9/27
*/
@Component
@Data
@NoArgsConstructor
@AllArgsConstructor
@ConfigurationProperties(prefix ="person")
@PropertySource(value ="classpath:application.properties")
public class Person {
//@ConfigurationProperties配置yaml⾃动JavaBean注⼊
private String name;
private Integer age;
private List<String> pets;
private Car car;
//@Value配置yaml属性引⼊,SPEL表达式获取值
@Value("${url.domain}")
private String url;
@Value("${url.location}")
private String location;
//@Value配置外部配置⽂件属性绑定
@Value("${spring.application.name}")
private String appName;
}
Car.java
package;
import AllArgsConstructor;
import Data;
import NoArgsConstructor;
import Component;
/**
* * @Name Car
* * @Description
* * @author tianmaolin
* * @Data 2021/9/27
*/
@Component
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Car {
spring到底是干啥的private String name;
}
3 Controller编写
我们改造下Controller,让返回结果为person的内容
package;
import Person;
import Controller;
import RequestMapping;
import ResponseBody;
import Resource;
/**
* * @Name HelloSpringController
* * @Description
* * @author tianmaolin
* * @Data 2021/9/22
*/
@Controller
public class HelloSpringController {
@Resource
private Person person;
@ResponseBody
@RequestMapping("/hello")
public Person hello(){
return person;
}
}
4 打印请求测试
启动服务后我们请求下Controller进⾏测试,可以发现各项数据都被正确打印了:
@Value和@ConfigurationProperties
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论