【SpringBoot】04 初探YAML与配置

什么是YAML?

https://www.cnblogs.com/mindzone/p/12849789.html


复合结构的语法

一个标配JavaBean

public class Person {

    private String name;
    private Integer age;
    private Boolean gender;
    private Date  birth;
    private Map<String,Object> map;
    private List<Object> list;
    private Dog puppy;
// 省略 GETTER & SETTER & ToString
}

组合的DogBean

public class Dog {

    private String name;
    private Integer age;
// 省略 GETTER & SETTER & ToString
}

我们的YAML文件应该这样编写:

person:
  name: 杰哥
  age: 18
  gender: true
  birth: 1995/09/05
  map:
    k1: v1
    k2: [1,3,4,7,9]
    k3: true
    k4: 3.14
  language: [C,C++,C#,Java]
  puppy:
    name: 二哈
    age: 3

 

如何在SpringBoot中绑定JavaBean?

1、打上@ConfigurationProperties注解和前缀属性

2、SpringBoot 配置注解处理器 没有配置?

我们点开【Open Documentation】查看

版本太高都没有文档???

索性更改文档查看【只要修改发行版本】

https://docs.spring.io/spring-boot/docs/1.5.9.RELEASE/reference/html/configuration-metadata.html#configuration-metadata-annotation-processor

官方告诉我们需要导入这个依赖才能识别我们的yaml文件配置:

经过测试,并不需要,这个提示警告可以忽视不用管

3、打上@Componenet注解

【否则初始化异常失败】

4、我们如何证明yaml配置注入到了实例中?

【使用测试类】

运行查看结果

Person{name='杰哥', age=18, gender=true, birth=Tue Sep 05 00:00:00 CST 1995, map={k1=v1, k2={0=1, 1=3, 2=4, 3=7, 4=9}, k3=true, k4=3.14}, list=[C, C++, C#, Java], puppy=null}

由于狗类没有装配注解,顾打印为null

狗类没有单独的写在yaml文件中,因为是组合在Person中的

我们只需要注册到容器中即可

查看人对象的结果


使用SpringBoot的Properties配置来进行编写

警告!在使用properties配置中文字符内容时,请先查看编码类型

如果是GBK,很用可能在IDEA控制台输出的字符造成乱码问题

建议全部改为UTF-8,并且,勾选自动适应

配置编写:

person.name = 张三
person.age = 18
person.birth = 1998/09/08
person.gender = false
person.map.k1 = 值1
person.map.k2 = 值2
person.list = Java,C,C++,C#
person.puppy.name = 一条舔狗
person.puppy.age = 1

【注意,这里我并没删除在yml文件中的配置】

打印结果是以properties为准的参数

Person{name='张三', age=18, gender=false, birth=Tue Sep 08 00:00:00 CST 1998, map={k1=值1, k2=值2, k3=true, k4=3.14}, list=[Java, C, C++, C#], puppy=Dog{name='一条舔狗', age=1}}

 也就是说SpringBoot优先使用properties的配置注入参数


代替@ConfigurationProperties的注入方法

也可以使用@Value在类中硬编码注入参数

@Value配合SPEL表达式来注入【这是来自Spring的注解】

可以支持的方式【字面量、${} 配置注入,#{}SPEL表达式】

现在我们这样使用

把配置读取的注解注释掉

直接使用@Value来注入

测试


@Value & @ConfigurationProperties的区别?

【以下简称 @V & @CP

- @CP 用于批量注入,支持松散绑定,不支持SPEL,支持JSR303校验,支持复杂类型封装

- @V 用于单个注入,不支持松散绑定,支持SPEL,不支持JSR303校验,不支持复杂类型封装

- properties 不支持SPEL表达式

- yaml 支持SPEL表达式


【Relaxed Binding】什么是松散绑定?

例如我们的Bean属性标识符是小驼峰:

private String lastName;

@CP注解在配置文件中去匹配这个标识符的时候

可以匹配这些规则的标识符:

- person.lastName

- person.last-name

- person.last_ame

- PERSON_LAST_NAME


JSR303注入校验

详细翻阅的校验注解种类参考:

https://www.ibm.com/developerworks/cn/java/j-lo-jsr303/

https://blog.csdn.net/qq_28867949/article/details/78922520

JSR303 对 @Value注入的校验是无效的,再三提示!!!

原文地址:https://www.cnblogs.com/mindzone/p/12849789.html