学习的点点滴滴

Email : 107311278@qq.com
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

SpringBoot - YAML 基本语法

Posted on 2019-09-25 15:20  v薛定谔的猫v  阅读(596)  评论(0)    收藏  举报

yaml 语法(大小写敏感)

    1.yaml语法的精髓在与对空格的使用,可谓使用得淋漓尽致。

    yaml语法主要是K:(冒号后面是空格) V值的形式(注意空格的使用)

    空格的另一个重要的使用时对配置文件的层级关系的控制,如: 

server:
port: 8090
address: /hello -->这:后都有空格,空格也控制层级关系

    2.yaml对不同类型的值的操作:(只要记得 空格是神奇的存在)

      对于(数值、字符串、和布尔)对于配置的值是字符串,不用双引号和单引号,直接写就可以了,若使用双引号的话会将特殊字符转义,使用单引号则会原样输出,不会对

特殊字符转义

        例如:name: "小二\n 过来"-------------------->会这样输出       小二   换行   过来

 

           name: '小二\n 过来'--------------------->会这样输出       小二 \n 过来(没有变化)

      对于K : V形式(对象、Map)键值对类型

 

         方法一、对象和Map占一行,属性和值会在另一行

Person:
  name: lcaiqin
  age: 23

 

        方法二、将所用配置写在一行里面  

Person: {name: lcaiqin,age: 23}
//--->>注意空格的使用

     对于数组(List,Set)

          方法一、使用- value的形式。如:注意是- 空格 值

Pets:
  - dog
  - cat
  - pig

          方法二、使用一行解决。注意是:冒号  空格

Pets: [cat,dog,pig]

三、yaml配置文件的值注入

    在实体类中编写如下代码:

复制代码
@Component                        //@ConfigurationProperties在Spring容器中运行需要组件的支持
@ConfigurationProperties(prefix = "person")    //告诉SpringBoot的所有属性和配置文件映射起来。prefix = "person"指从配置文件的什么位置映射
public class Person {

    //基本类型
    private String name;
    private Integer age;
    private Boolean Boos;

    //对象
    private Cart cart;
    private Map<String,Object> map;

    //数组
    private List<Object> list;
复制代码

    写法一、在application.yml中输入如下代码。

复制代码
person:
  name: 独而不孤
  age: 23
  Boos: true
  cart:
    name: 奥迪
    color: 白色
  map:
    k1: v1
    k2: v2
  list:
    - apple
    - pear
    - eat
复制代码

    写法二、在application.yml中输入如下代码。(一行元素搞定)

    

复制代码
person:
  name: 独而不孤
  age: 23
  cart: {name: 奥迪,color: 白色}
  list: [apple,pear,eat]
  map: {k1: v1,k2: v2}
  Boos:true
复制代码

四、application.properits配置文件注入

  bean中代码:

//基本类型
    @Value("${person.name}")    //使用el表达式,从配置文件中取出
    private String name;
    @Value("${person.age}")
    private Integer age;
    private Boolean Boos;

  application.propeerties代码:

复制代码
person.age=23
person.boos=true
person.cart.name=奥迪
person.cart.color=白色
person.name=独而不孤
person.map.k1=值1
person.map.k2=值2
person.list.list1=apple
复制代码

  运行效果:乱码

    

   解决乱码:"File">>"Settings">>"Editor">>"File Encodings"

 

 

  这样就可以了。

 

五、@Value和@ConfigurationProperties的比较(@ConfigurationPropertis要配合@Component)

 

@ConfigurationPropertis

@Value

功能上

对所有的属性进行注入值

一个一个注入值

语法复杂程度

简单(可以一行一个一元素)

元素冗余

SpEL

不支持

支持

JSR303数据校验

支持

不支持

复杂类型封装

支持

不支持

 

       个人觉得(除了需要对个别的属性赋值之外)都建议使用@ConfigurationProperties

     1.对JSR303数据校验

  

复制代码
@Component
@ConfigurationProperties(prefix = "person")
@Validated    -->加入此标签
public class Person {

    //基本类型
    @Email
    private String name;
    private Integer age;
    private Boolean Boos;
复制代码

   运行效果