SpringBoot小知识:application.yml的基本语法
1、什么是YAML?
我们都知道SpringBoot项目有两种可以配置文件的方式:1、application.properties 2、application.yml
但是application.properties相较于applicatoin,yml编写起来更麻烦,并且可读性更差,所以一般推荐使用application.yml来进行项目的配置。
YAML是一种标记语言,其语法和Josn类似。
2、YAML基本语法
1、基本语法:
键值对: K:(空格) v
通过空格的缩进来控制层级关系,同一列的数据是同一层级的。
server:
port: 8080
path: /****
需要注意:属性和值是大小写敏感的
2、值的写法
字面量:普通的值(数字,字符串,布尔值)
字符串默认是不需要单引号和双引号。
下面给出单引号和双引号的区别:
单引号:会转义特殊字符。
双引号:不会转义字符里的特殊字符,特殊字符仍然是本身的意思
name: "zhangsan \n list" #zhangsan 换行 list
name: 'zhangsan \n list' #zhangsan \n list
3、对象,Map写法:
对象是K:v的方式:
friends:
lastName: zhangsan
age: 20
行内写法:
friends: {lastName:zhangsan ,age:18}
4、数组(List,Set)
用-来表示数组中的一个元素:
animals:
- cat
- dog
- pig
3、从配置文件中读取值
例如我们的application.yml 如下:
person:
lastName: zhangsan
age: 18
boss: false
birth: 2018/12/16
maps: {a1:v1; a2:12}
lists:
- lisi
- zhangsan
dog:
name: 狗
age: 2
我们可以在Bean中新建person类如下:
@ConfigurationProperties:告诉SpringBoot将本类中的属性和配置文件中相关的配置进行绑定
* prefix = "person":配置文件中哪个下面的所有属性进行一一映射
* 只有这个组件是容器中的组件,才能容器提供的@ConfigurationProperties功能;
*/
// @PropertySource(value={"classpath:person.properties"}) 读取指定位置的配置文件,若为无,则默认是全局配置文件applicatioin.yml,
@Component
@ConfigurationProperties(prefix="person")
public class Person {
private String lastName;
private Integer age;
private Boolean boss;
private Date birth;
private Map<String,Object> maps;
private List<Object> lists;
public Dog dog;
注意这样导入需要在pom中导入对应的依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
这里当项目运行时,person对象就可以获取到application.yml中对应的值
第二种读取application.yml中值的方式:
使用@Value来进行数据的导入:
例如:
@Component
//@ConfigurationProperties(prefix="person")
public class Person {
@Value("${person.last-name}")
private String lastName;
@Value("#{10*2}")
private Integer age;
@Value("true")
private Boolean boss;
可以通过@Value的方式从配置文件中将值注入到我们的实体类当中。