• 编写实体类
package com.llf.Pojo;


import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

import java.util.ArrayList;
import java.util.Map;

@Component
@ConfigurationProperties(prefix = "person")
public class Person {
    private  String name;
    private  Integer age;
    private Map<String,Object> map;
    private ArrayList<Object> list;
    @Autowired
    private  Dog dog;

    public Person() {
    }

    public Person(String name, Integer age, Map<String, Object> map, ArrayList<Object> list, Dog dog) {
        this.name = name;
        this.age = age;
        this.map = map;
        this.list = list;
        this.dog = dog;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public Map<String, Object> getMap() {
        return map;
    }

    public void setMap(Map<String, Object> map) {
        this.map = map;
    }

    public ArrayList<Object> getList() {
        return list;
    }

    public void setList(ArrayList<Object> list) {
        this.list = list;
    }

    public Dog getDog() {
        return dog;
    }

    public void setDog(Dog dog) {
        this.dog = dog;
    }

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", map=" + map +
                ", list=" + list +
                ", dog=" + dog +
                '}';
    }
}
  • 编写yaml文件
person:
  name: 狂神
  age: 3
  map: {k1: v1,k2: v2}
  list:
    - code
    - girl
    - games
  dog:
    name: kuangshen
    age: 1

yaml语法:

  • yaml使用KV键值对的形式赋值 中间用==:==隔开,属性和值之间用空格 即 属性:空格+属性值
  • yaml语法有严格的层次之分,一级一级嵌套,name,age,map,list是person的属性 dog下面的name age则是dog的属性

springboot yaml 如何配置map_字符串

层次分明

  • 最后在实体类的类上加一个注解
@ConfigurationProperties(prefix = "xxxx")  此处是person

xxxx代表的就是yaml配置文件中你的对象的名字

这个注解的作用就是将yaml中的对象的值与实体类的值绑定

相较于之前的@Value 这个注解 我们现在只需要写一个注解就可以了

  • 自定义语法

可以在yaml配置文件中 在属性值出使用el占位符表达式生成随机值

]

person:
  name: ${random.uuid}
  age: ${random.int(50)}
  map: {k1: v1,k2: v2}
  list:
    - code
    - girl
    - games

springboot yaml 如何配置map_spring_02


springboot yaml 如何配置map_spring_03

JSR303校验

1.空值检查

注解

功能

@Null

校验对象是否为null

@NotNull

校验对象是否不为null,无法查检长度为0的字符串

@NotEmpty

不能为null或空

@NotBlank

校验约束字符串是不是Null还有被Trim的长度是否大于0,只对字符串,且会去掉前后空格

2.Boolean检查

注解

功能

@AssertTrue

校验Boolean 对象是否为 true

@AssertFalse

校验Boolean 对象是否为 flase

3.长度检查

注解 功能
@Length (String)长度在范围内
@Size (Array,Colleation,Map,String)长度在范围内

4.日期检查

注解

功能

@Future

日期必须在当前日期的未来

@Past

日期必须在当前日期的过去

5.数值检查

注解 功能

注解

功能

@Range(min=,max=)

值在范围内

@Max

验证 Number 和 String 对象是否小等于指定的值

@Min

验证 Number 和 String 对象是否大等于指定的值

@DecimalMax

被标注的值必须不大于约束中指定的最大值. 这个约束的参数是一个通过BigDecimal定义的最大值的字符串表示.小数存在精度

@DecimalMin

被标注的值必须不小于约束中指定的最小值. 这个约束的参数是一个通过BigDecimal定义的最小值的字符串表示.小数存在精度

@Digits

验证 Number 和 String 的构成是否合法

@Digits(integer=,fraction=)

验证字符串是否是符合指定格式的数字,interger指定整数精度,fraction指定小数精度。

6.其他检查

注解 功能

注解

功能

@URL

必须是一个URL

@Pattern

正则表达式

@Email

必须是一个Email,或空

使用方法:在需要校验的类上添加@Validated注解 在需要校验的属性上添加相应的注解名

新版本需要添加依赖

<!--JRC303校验-->
        <dependency>
            <groupId>org.hibernate.validator</groupId>
            <artifactId>hibernate-validator</artifactId>
            <version>6.0.17.Final</version>
        </dependency>

实体类

@Component
@Validated
@ConfigurationProperties(prefix = "dog")
public class Dog {
    @Value("狂神")
    private String name;
    @Value("3")
    private String age;
    @Email()
    private String email;

yaml配置文件

dog:
  email: 123

test测试

@Autowired
    private Dog dog;
    @Test
    void contextLoads() {
       System.out.println(dog.toString());
    }

结果

springboot yaml 如何配置map_配置文件_04

springboot yaml 如何配置map_spring_05

测试发现 这个功能十分鸡肋,他只会判定你的字符串中有没有@这个符号 而不会检验你的email是否有效

多运行环境切换

使用properties版本

创建不同的properties文件 文件名字用application- 加文件名.properties

springboot yaml 如何配置map_配置文件_06

在任意一个properties文件中输入

spring.profiles.active=xxx   此处的xxx就是文件-后面的文件名  就拿dev举例  
那么我们现在的运行环境就是dev配置的环境

springboot yaml 如何配置map_spring_07

使用yaml版本

使用properties我们需要创建多个文件夹 但是使用yaml的格式 我们可以只使用一个yaml文件即可

spring:  
	profiles:    
		active: test
---
server:
  port: 8081
spring:
  profiles: dev
# 这里我们使用三个- 来表示文件的结束 即---下面的是一个新的文件 我们显示的定义了文件名 profiles为dev---server:  port: 8082spring:  profiles: test

springboot yaml 如何配置map_字符串_08

配置文件优先级问题

在整个程序中配置文件可以在4个地方创建 他们分别是

  • 主程序目录下
  • 主程序的config目录下
  • 类路径下
  • 类路径的config目录下

springboot yaml 如何配置map_spring_09

它的优先级顺序是 根目录的config–>根目录—>类路径下的config—>类路径

如果在一个地方 那么按照文件的上下顺序 越靠上优先级顺序越高