3.1.补充:SpringBoot属性赋值,JSR303校验,多环境配置以及配置文件位置

Posted 海恋天

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了3.1.补充:SpringBoot属性赋值,JSR303校验,多环境配置以及配置文件位置相关的知识,希望对你有一定的参考价值。

一.YMAL的占位符,松散绑定,实体类装载配置文件信息用于属性赋值

  • 占位符: ${random.int} 
  • 松散绑定:Dog.java中的属性名为dogName,YMAL中对应的为dog-name
  • 实体类装载配置文件信息: @ConfigurationProperties(prefix = "dog") 会将配置文件中的dog-name和age赋值给实体类的dogName和age
person:
  name: qinjiang
  age: ${random.int}  #使用占位符设置值
  happy: false
  birth: 2000/01/01
  maps: {k1: v1,k2: v2}
  lists:
    - code
    - girl
    - music
  dog:
    dog-name: 旺财
    age: ${random.int}

dog:
  dog-name: 阿黄    #名字与属性松散绑定
  age: 5
@Component
@ConfigurationProperties(prefix = "dog")
public class Dog {
    private String dogName;
    private Integer age;

    public Dog() {
    }

    public Dog(String dogName, Integer age) {
        this.dogName = dogName;
        this.age = age;
    }

    public String getDogName() {
        return dogName;
    }

    public void setDogName(String dogName) {
        this.dogName = dogName;
    }

    public Integer getAge() {
        return age;
    }

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

    @Override
    public String toString() {
        return "Dog{" +
                "dogName=\'" + dogName + \'\\\'\' +
                ", age=" + age +
                \'}\';
    }
}

二.JSR 303 基本的校验规则

空检查 

  1. @Null 验证对象是否为null 
  2. @NotNull 验证对象是否不为null, 无法查检长度为0的字符串 
  3. @NotBlank 检查约束字符串是不是Null还有被Trim的长度是否大于0,只对字符串,且会去掉前后空格. 
  4. @NotEmpty 检查约束元素是否为NULL或者是EMPTY.

Booelan检查 

  1. @AssertTrue 验证 Boolean 对象是否为 true 
  2. @AssertFalse 验证 Boolean 对象是否为 false

长度检查 

  1. @Size(min=, max=) 验证对象(Array,Collection,Map,String)长度是否在给定的范围之内 
  2. @Length(min=, max=) Validates that the annotated string is between min and max included.

日期检查 

  1. @Past 验证 Date 和 Calendar 对象是否在当前时间之前,验证成立的话被注释的元素一定是一个过去的日期 
  2. @Future 验证 Date 和 Calendar 对象是否在当前时间之后 ,验证成立的话被注释的元素一定是一个将来的日期 
  3. @Pattern 验证 String 对象是否符合正则表达式的规则,被注释的元素符合制定的正则表达式,regexp:正则表达式 flags: 指定 Pattern.Flag 的数组,表示正则表达式的相关选项。

数值检查 
建议使用在Stirng,Integer类型,不建议使用在int类型上,因为表单值为“”时无法转换为int,但可以转换为Stirng为”“,Integer为null 

  1. @Min 验证 Number 和 String 对象是否大等于指定的值 
  2. @Max 验证 Number 和 String 对象是否小等于指定的值 
  3. @DecimalMax 被标注的值必须不大于约束中指定的最大值. 这个约束的参数是一个通过BigDecimal定义的最大值的字符串表示.小数存在精度 
  4. @DecimalMin 被标注的值必须不小于约束中指定的最小值. 这个约束的参数是一个通过BigDecimal定义的最小值的字符串表示.小数存在精度 
  5. @Digits 验证 Number 和 String 的构成是否合法 
  6. @Digits(integer=,fraction=) 验证字符串是否是符合指定格式的数字,interger指定整数精度,fraction指定小数精度。 
  7. @Range(min=, max=) 被指定的元素必须在合适的范围内 
  8. @Range(min=10000,max=50000,message=”range.bean.wage”) 
  9. @Valid 递归的对关联对象进行校验, 如果关联对象是个集合或者数组,那么对其中的元素进行递归校验,如果是一个map,则对其中的值部分进行校验.(是否进行递归验证) 
  10. @CreditCardNumber信用卡验证 
  11. @Email 验证是否是邮件地址,如果为null,不进行验证,算通过验证。 
  12. @ScriptAssert(lang= ,script=, alias=) 
  13. @URL(protocol=,host=, port=,regexp=, flags=)

代码展示:

  1. @Validated用于数据校验
  2. @Email设置属性格式必须为email格式
 1 @Component
 2 @ConfigurationProperties(prefix = "person")
 3 @Validated
 4 public class Person {
 5 
 6     @Email()
 7     private String name;
 8     private Integer age;
 9     private Boolean happy;
10     private Date birth;
11     private Map<String,Object> maps;
12     private List<Object> lists;
13     private Dog dog;
14 
15     public Person() {
16     }
17 
18     public Person(String name, Integer age, Boolean happy, Date birth, Map<String, Object> maps, List<Object> lists, Dog dog) {
19         this.name = name;
20         this.age = age;
21         this.happy = happy;
22         this.birth = birth;
23         this.maps = maps;
24         this.lists = lists;
25         this.dog = dog;
26     }
27 
28     public String getName() {
29         return name;
30     }
31 
32     public void setName(String name) {
33         this.name = name;
34     }
35 
36     public Integer getAge() {
37         return age;
38     }
39 
40     public void setAge(Integer age) {
41         this.age = age;
42     }
43 
44     public Boolean getHappy() {
45         return happy;
46     }
47 
48     public void setHappy(Boolean happy) {
49         this.happy = happy;
50     }
51 
52     public Date getBirth() {
53         return birth;
54     }
55 
56     public void setBirth(Date birth) {
57         this.birth = birth;
58     }
59 
60     public Map<String, Object> getMaps() {
61         return maps;
62     }
63 
64     public void setMaps(Map<String, Object> maps) {
65         this.maps = maps;
66     }
67 
68     public List<Object> getLists() {
69         return lists;
70     }
71 
72     public void setLists(List<Object> lists) {
73         this.lists = lists;
74     }
75 
76     public Dog getDog() {
77         return dog;
78     }
79 
80     public void setDog(Dog dog) {
81         this.dog = dog;
82     }
83 
84     @Override
85     public String toString() {
86         return "Person{" +
87                 "name=\'" + name + \'\\\'\' +
88                 ", age=" + age +
89                 ", happy=" + happy +
90                 ", birth=" + birth +
91                 ", maps=" + maps +
92                 ", lists=" + lists +
93                 ", dog=" + dog +
94                 \'}\';
95     }
96 }

源码位置:

三.多环境配置以及配置文件位置

1.配置的位置(4个位置)

  1. file:./config/  ,项目目录下建立一个config文件夹,config文件夹下建立application.yaml
  2. file:./  ,项目目录下直接建立一个application.yaml
  3. classpath:/config/    ,resources下建立一个config文件夹,config文件夹下建立application.yaml
  4. classpath:/     ,resources下直接建立一个application.yaml

2.配置优先级:上面的顺序从上到下一次降低( file:./config/ > file:./ >  classpath:/config/ > classpath:/ )

3.多个配置文件来指定配置环境

  1. application.yaml:用来指定激活哪一个配置文件(application-xxx.yaml,绑定激活xxx即可)

  2. application-test.yaml:指定服务端口号8082

  3. application-dev.yaml:指定服务端口号8081

4.YMAL简化多文件配置

一个文件就能解决,中间用三个横线隔开

5.深入理解自动装配

精髓:

1)、SpringBoot启动会加载大量的自动配置类

2)、我们看我们需要的功能有没有在SpringBoot默认写好的自动配置类当中;

3)、我们再来看这个自动配置类中到底配置了哪些组件;(只要我们要用的组件存在在其中,我们就不需要再手动配置了)

4)、给容器中自动配置类添加组件的时候,会从properties类中获取某些属性。我们只需要在配置文件中指定这些属性的值即可;

xxxxAutoConfigurartion:自动配置类;给容器中添加组件

xxxxProperties:封装配置文件中相关属性;

application.yaml:用于修改springboot的属性

6.查看哪些配置生效和没有生效

(1)application.yaml中配置 debug: true 

(2)设置生效只需要在pom.xml中添加启动器即可

类似:spring-boot-starter-xxx

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

 

以上是关于3.1.补充:SpringBoot属性赋值,JSR303校验,多环境配置以及配置文件位置的主要内容,如果未能解决你的问题,请参考以下文章

JSR303数据校验

SpringBoot中集成参数校验

SpringBoot中集成参数校验

将 Java WebSockets (JSR-356) 与 SpringBoot 集成

6.springboot----------JSR303校验

SpringBoot--JSR303数据校验