SpringBoot-03-yaml、JSR303校验、多环境配置

醉酒当歌 提交于 2020-02-28 07:40:03

1、配置文件

配置文件

  SpringBoot使用一个全局的配置文件 , 配置文件名称是固定的

  • application.properties
    语法结构 : key=value
  • application.yaml
    语法结构 :key:空格 value
  • 配置文件的作用 :修改SpringBoot自动配置的默认值,因为SpringBoot在底层都给我们自动配置好了;

1.1、yaml语法

  YAML是 “YAML Ain’t a Markup Language” (YAML不是一种置标语言)的递归缩写。
   yaml最大的优势是能够进行复杂类型封装, 使用@value就不支持

#对象、Map(键值对)
person:
  age: 16
  tel: 123456
  name: lucius
#行内写法
#person: {name: qinjiang,age: 3}

#数组 List Set
pets:
  - cat
  - dog
  - pig
#行内写法
#pets: [cat,dog,pig]

#占位符引用其他属性的值,如果不存在可以设置默认值
person:
  age: ${random.int}、${random.long}、${random.int(10)}
  tel: 123456
  name: ${person.hello:hello}_旺财
#此时由于person.hello这个参数值不存在,因此默认值就是**hell0_旺财**

1.2、注入配置文件使用

第一步: 在SpringBoot的主程序的同级目录下建包,只有这样,主程序才会对这些类生效 ; 我们建一个pojo的包放入我们的Person类。

package com.lucius.pojo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

@Component
@ConfigurationProperties(prefix = "person")
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Person {
    private int age;
    private int tel;
    private String name;

}

注意事项:

  • @ConfigurationProperties作用:
    将配置文件中配置的每一个属性的值,映射到这个组件中;
    告诉SpringBoot将本类中的所有属性和配置文件中相关的配置进行绑定
    参数 prefix = “person” : 将配置文件中的person下面的所有属性一一对应
    只有这个组件是容器中的组件,才能使用容器提供的@ConfigurationProperties功能

  • ConfigurationProperties中的参数就是我们创建的yaml配置文件名称

  • @Component //注册bean

第二步: 编写yaml配置文件

person:
  age: 16
  tel: 123456
  name: lucius

注意事项:

  • 每个变量名称必须和实体类中的一致

第三步: 在自动生成的测试类中进行调用

@SpringBootTest
class Springboot01HellospringbootApplicationTests {
 
    @Autowired
    Person person;
    
    @Test
    void contextLoads() {
        System.out.println(person);
    }
}

注意事项:

  • @Autowired注解表明是自动装配的

2、JSR303数据校验

  spring-boot中可以用@validated来校验数据,如果数据异常则会统一抛出异常,方便异常中心统一处理。我们这里来写个注解让我们的name只能支持Email格式
使用方法:


package com.lucius.pojo;


import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import org.springframework.validation.annotation.Validated;

import javax.validation.constraints.Email;

@Component
@ConfigurationProperties(prefix = "person")
@Data
@AllArgsConstructor
@NoArgsConstructor
@Validated//数据校验
public class Person { 
    private int age;
    private int tel;
    private String name;
    @Email
    private String email;
}

  如此一来,email这个参数就只能是email格式,否则会报错
  使用数据校验,可以保证数据的正确性;

JSR303中包含的校验注解:

Constraint 详细信息
@Null 被注释的元素必须为 null
@NotNull 被注释的元素必须不为 null
@AssertTrue 被注释的元素必须为 true
@AssertFalse 被注释的元素必须为 false
@Min(value) 被注释的元素必须是一个数字,其值必须大于等于指定的最小值
@Max(value) 被注释的元素必须是一个数字,其值必须小于等于指定的最大值
@DecimalMin(value) 被注释的元素必须是一个数字,其值必须大于等于指定的最小值
@DecimalMax(value) 被注释的元素必须是一个数字,其值必须小于等于指定的
@Size(max, min) 被注释的元素的大小必须在指定的范围内
@Digits (integer, fraction) 被注释的元素必须是一个数字,其值必须在可接受的范围内
@Past 被注释的元素必须是一个过去的日期
@Future 被注释的元素必须是一个将来的日期
@Pattern(value) 被注释的元素必须符合指定的正则表达式
@Email 被注释的元素必须是电子邮箱地址
@Length 被注释的字符串的大小必须在指定的范围内
@NotEmpty 被注释的字符串的必须非空
@Range 被注释的元素必须在合适的范围内

其中:
@Pattern(value)  被注释的元素必须符合指定的正则表达式
是最核心的一个,有了这个注解,我们可以检查参数的类型

3、多环境配置

方法一: 配置多个配置文件
在这里插入图片描述

  在此默认的是application.yaml,那当我们需要使用其他配置的时候怎么办呢?很简单,只需要在默认配置文件中将其他环境激活:

spring:
  profiles:
    active: env

方法二:使用一个yaml文件进行设置
注意使用—进行分隔

server:
  port: 8081

spring:
  profiles:
    active: env
---
server:
  port: 8082
#配置环境的名称
spring:
  profiles: dev
---
server:
  port: 8083
spring:
  profiles: prod  

4、配置文件加载位置优先级

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

  • 优先级1:项目路径下的config文件夹配置文件
  • 优先级2:项目路径下配置文件
  • 优先级3:资源路径下的config文件夹配置文件
  • 优先级4:资源路径下配置文件(默认)
    优先级由高到底,高优先级的配置会覆盖低优先级的配置;

SpringBoot官方文档.

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!