• 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;
        ......  
    }
  • 相关阅读:
    python 文件相关知识
    python字符串,列表,字符串,元组,集合的一些方法
    一些小技巧和破坏性的实验
    CentOs 系统启动流程相关
    入手内核的前篇之进程和计划任务
    外部中断的理解
    串口程序的理解
    USART1_IRQHandler 函数的理解
    STM32串口的理解
    中断NVIC优先级的理解
  • 原文地址:https://www.cnblogs.com/niudaben/p/11987367.html
Copyright © 2020-2023  润新知