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 基本的校验规则
空检查
- @Null 验证对象是否为null
- @NotNull 验证对象是否不为null, 无法查检长度为0的字符串
- @NotBlank 检查约束字符串是不是Null还有被Trim的长度是否大于0,只对字符串,且会去掉前后空格.
- @NotEmpty 检查约束元素是否为NULL或者是EMPTY.
Booelan检查
- @AssertTrue 验证 Boolean 对象是否为 true
- @AssertFalse 验证 Boolean 对象是否为 false
长度检查
- @Size(min=, max=) 验证对象(Array,Collection,Map,String)长度是否在给定的范围之内
- @Length(min=, max=) Validates that the annotated string is between min and max included.
日期检查
- @Past 验证 Date 和 Calendar 对象是否在当前时间之前,验证成立的话被注释的元素一定是一个过去的日期
- @Future 验证 Date 和 Calendar 对象是否在当前时间之后 ,验证成立的话被注释的元素一定是一个将来的日期
- @Pattern 验证 String 对象是否符合正则表达式的规则,被注释的元素符合制定的正则表达式,regexp:正则表达式 flags: 指定 Pattern.Flag 的数组,表示正则表达式的相关选项。
数值检查
建议使用在Stirng,Integer类型,不建议使用在int类型上,因为表单值为“”时无法转换为int,但可以转换为Stirng为”“,Integer为null
- @Min 验证 Number 和 String 对象是否大等于指定的值
- @Max 验证 Number 和 String 对象是否小等于指定的值
- @DecimalMax 被标注的值必须不大于约束中指定的最大值. 这个约束的参数是一个通过BigDecimal定义的最大值的字符串表示.小数存在精度
- @DecimalMin 被标注的值必须不小于约束中指定的最小值. 这个约束的参数是一个通过BigDecimal定义的最小值的字符串表示.小数存在精度
- @Digits 验证 Number 和 String 的构成是否合法
- @Digits(integer=,fraction=) 验证字符串是否是符合指定格式的数字,interger指定整数精度,fraction指定小数精度。
- @Range(min=, max=) 被指定的元素必须在合适的范围内
- @Range(min=10000,max=50000,message=”range.bean.wage”)
- @Valid 递归的对关联对象进行校验, 如果关联对象是个集合或者数组,那么对其中的元素进行递归校验,如果是一个map,则对其中的值部分进行校验.(是否进行递归验证)
- @CreditCardNumber信用卡验证
- @Email 验证是否是邮件地址,如果为null,不进行验证,算通过验证。
- @ScriptAssert(lang= ,script=, alias=)
- @URL(protocol=,host=, port=,regexp=, flags=)
代码展示:
- @Validated用于数据校验
- @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个位置)
file:./config/ ,项目目录下建立一个config文件夹,config文件夹下建立application.yaml
file:./ ,项目目录下直接建立一个application.yaml
classpath:/config/ ,resources下建立一个config文件夹,config文件夹下建立application.yaml
classpath:/ ,resources下直接建立一个application.yaml
2.配置优先级:上面的顺序从上到下一次降低( file:./config/ > file:./ > classpath:/config/ > classpath:/ )
3.多个配置文件来指定配置环境
-
application.yaml:用来指定激活哪一个配置文件(application-xxx.yaml,绑定激活xxx即可)
-
application-test.yaml:指定服务端口号8082
-
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校验,多环境配置以及配置文件位置的主要内容,如果未能解决你的问题,请参考以下文章
将 Java WebSockets (JSR-356) 与 SpringBoot 集成