YAML语法使用 & JSR303数据校验

1.YAML

YAML是 "YAML Ain't a Markup Language" (YAML不是一种置标语言)的递归缩写

# yaml配置
server:
    prot: 8080

YAML语法

# 基本语法(空格不能省略)
# 以空格的缩进来控制层级关系,只要是左边对齐的一列数据都是同一个层级的
# 属性和值的大小写都是十分敏感的
k:(空格) v
# 例子
server:
  port: 8081
  path: /hello

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

# 字面量直接写在后面就可以 , 字符串默认不用加上双引号或者单引号;
# “” 双引号,不会转义字符串里面的特殊字符 , 特殊字符会作为本身想表示的意思;比如 :name: "zhang san" ,输出 : zhang 换行 san
# '' 单引号,会转义特殊字符 , 特殊字符最终会变成和普通字符一样输出 比如 : name: ‘zhang san’   输出 : zhang     san
k: v

对象、Map(键值对)

k: 
    v1:
    v2:
---
# 实例
student:
    name: zhangsan
    age: 20
# 行内写法
student: {name: zhangsan,age: 20}

数组( List、set )

k:
 - v1
 - v2
 - v3
---
# 实例
pets:
 - cat
 - dog
 - pig
# 行内写法
pets: [cat,dog,pig]

程序实现

导入配置文件处理器,配置文件进行绑定就会有提醒

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

示例

# YAML配置
person:
    name: 张三
    age: 20
    happy: true
    birth: 2019/01/01
    maps: {k1: v1,k2: v2}
    lists:
      - code
      - girl
      - music
    dog:
      name: 温馨的小家
      num: 5

--------------------------------------------------

/*
@ConfigurationProperties作用:
将配置文件中配置的每一个属性的值,映射到这个组件中;
告诉SpringBoot将本类中的所有属性和配置文件中相关的配置进行绑定
参数 prefix = “person” : 将配置文件中的person下面的所有属性一一对应;
只有这个组件是容器中的组件,才能使用容器提供的@ConfigurationProperties功能
*/
@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 Home home;
    //get,set,toString省略
}

两种注入值方式对比@configurationProperties与@value

总结

  • 配置yml和配置properties都可以获取到值 , 强烈推荐 yml
  • 如果我们在某个业务中,只需要获取配置文件中的某个值,可以使用一下 @value
  • 如果说专门编写了一个JavaBean来和配置文件进行映射,就直接使用@configurationProperties

YAML的多环境切换

yml实现不需要创建多个配置文件,一个配置文件用“---”分割即可,表示多个yml多文档块

# 示例
server:
  port: 8080
#选择要激活那个环境块
spring:
  profiles:
    active: prod

---
server:
  port: 8081
#配置环境的名称
spring:
  profiles: dev

---

server:
  port: 8082
#配置环境的名称
spring:
  profiles: prod 

注意:如果yml和properties同时都配置了端口,并且没有激活其他环境 , 默认会使用properties配置文件的。

springboot 启动会扫描以下位置的application.properties或者application.yml文件作为Spring boot的默认配置文件

优先级由高到底,高优先级的配置会覆盖低优先级的配置

2.JSR303数据校验

spring-boot中可以用@validated来校验数据,如果数据异常则会统一抛出异常,方便异常中心统一处理。

// 示例
@Component //注册bean
@ConfigurationProperties(prefix = "person")
@Validated  //数据校验
public class Person {
    @Email //name必须是邮箱格式
    private String email;
}

@PropertySource :加载指定的配置文件;使用@configurationProperties默认从全局配置文件中获取值

// @PropertySource注解加载person.properties配置文件,做关联
@PropertySource(value = "classpath:person.properties")
@Component //注册bean
public class Person {
    @Value("${name}")
    private String name;
    ......  
}
原文地址:https://www.cnblogs.com/niudaben/p/11987367.html