YAML语法学习

yaml语法学习

配置文件

SpringBoot使用一个全局的配置文件 , 配置文件名称是固定的

  • application.properties

    • 语法结构 :key=value

  • application.yml

    • 语法结构 :key:空格 value

配置文件的作用 :修改SpringBoot自动配置的默认值,因为SpringBoot在底层都给我们自动配置好了;

比如我们可以在配置文件中修改Tomcat 默认启动的端口号!测试一下!

server.port=8081

yaml概述

YAML是 "YAML Ain't a Markup Language" (YAML不是一种标记语言)的递归缩写。在开发的这种语言时,YAML 的意思其实是:"Yet Another Markup Language"(仍是一种标记语言)

这种语言以数据**作为中心,而不是以标记语言为重点!**

以前的配置文件,大多数都是使用xml来配置;比如一个简单的端口配置,我们来对比下yaml和xml

传统的xml配置:

<server>
    <port>8081</port>
</server>

yaml配置:

server:
    port: 8080

yaml基础语法

说明:语法要求比较严格:

  1. 空格不能省略

  2. 一缩进来控制层级关系,只要是左对齐的一列数据都是同一个层级的.

  3. 属性和值的大小写都是十分敏感的.

普通的值[数字,布尔,字符串]:

可以直接写在后面,字符串默认不用加上双引;

key: value

注意:

  1. 双引号不会转移字符串里面的特殊字符,特殊字符回作为本身想表达的意思;

  2. 单引号,会转移特殊字符,特殊字符最终回编程和普通字符一样输出

对象,MAP(键值对):

#对象,map格式
key:
    value1
    value2

user:
    name: 张三
    age: 18

行内写法:

user: {name: 张三,age: 18}

数组(List,set):

用-值表示数组中的一个元素:

name:
    - 张三
    - 李四
    - 王五
    - 赵六

行内写法:

name: [张三,李四,王五,赵六]

修改Springboot端口号:

配置文件中加入,端口号的参数 就可以修改端口了;

server:
    port: 8082

注入配置文件

yaml文件更强大的地方在于,它可以给我们实体类进行赋值

yaml注入配置文件

1,在springboot项目中的resources目录下新建一个application.yml

2.编写一个实体类

@Component//注册bean到容器中
@Data
public class Dog{
    private String name;
    private Integer age;
}

3.我们原来是怎么注入的: @Value

@Component//注册bean到容器中
@Data
public class Dog{
    @Value("张三")
    private String name;
    @Value("12")
    private Integer age;
}

4,我们编写一个复杂一点的实体类

​
@Component //注册bean到容器中
public class Person {
    private String name;
    private Integer age;
    private Boolean happy;
    private Date birth;
    private Map<String,Object> maps;
    private List<Object> lists;
    private Dog dog;
    
    //有参无参构造、get、set方法、toString()方法  
}

5,使用yaml进行注入

person:
    name: 张三
    age: 12
    happy: false
    birth: 1998/10/14
    maps: {k1: v1,k2: v2}
    lists:
     - 1
     - 2
     - 3
    dog:
        name: 旺财
        age: 19
    

6,我们刚才已经写好了所有的值的yaml形式,现在我们进行注入

​
@Component  //将类注册到bean中
@ConfigurationProperties(prefix = "person")
public class Person {
    private String name;
    private Integer age;
    private Boolean happy;
    private Date birth;
    private Map<String,Object> maps;
    private List<Object> lists;
    private Dog dog;
}

@ConfigurationProperties作用:

将配置文件中的没有个属性的值,映射到这个组件中

作用就是告诉springboot江本类中的所有属性和配置文件中相关的配置进行配置绑定

参数prefix="person":将配置文件中的person下面的所有属性一一对应

7.IDEA提示错误的话可以导入一个依赖

​
<!-- 导入配置文件处理器,配置文件进行绑定就会有提示,需要重启 -->
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-configuration-processor</artifactId>
  <optional>true</optional>
</dependency>

加载指定的配置文件

@PropertySource: 加载指定的配置文件;

@configurationProperties:默认从全局配置文件中获取值

1.我们现在resources目录下新建一个person.properties文件

name=张三

2.然后在代码中加载指定的person.properties文件

@PropertySource(value = "classpath:person.properties")
@Component //注册bean
public class Person {
​
    @Value("${name}")
    private String name;
​
    ......  
}

配置文件占位符

​
person:
    name: 张三${random.uuid} # 随机uuid
    age: ${random.int}  # 随机int
    happy: false
    birth: 1998/10/14
    maps: {k1: v1,k2: v2}
    lists:
      - code
      - girl
      - music
    dog:
      name: ${person.hello:other}_李四
      age: 1

对比:

1、@ConfigurationProperties只需要写一次即可 , @Value则需要每个字段都添加

2、松散绑定:这个什么意思呢? 比如我的yml中写的last-name,这个和lastName是一样的, - 后面跟着的字母默认是大写的。这就是松散绑定。可以测试一下

3、JSR303数据校验 , 这个就是我们可以在字段是增加一层过滤器验证 , 可以保证数据的合法性

4、复杂类型封装,yml中可以封装对象 , 使用value就不支持

结论:

配置yml和配置properties都可以获取到值 , 强烈推荐 yml;

如果我们在某个业务中,只需要获取配置文件中的某个值,可以使用一下 @value;

如果说,我们专门编写了一个JavaBean来和配置文件进行一一映射,就直接@configurationProperties,不要犹豫!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值