常用配置

YAML、JSR303校验、多环境切换

YAML基本使用

YAML 是 "YAML Ain't a Markup Language"(YAML 不是一种标记语言)的递归缩写。在开发的这种语言时,YAML 的意思其实是:"Yet Another Markup Language"(仍是一种标记语言)。

基本语法

  • 大小写敏感

  • 使用缩进表示层级关系

  • 缩进不允许使用tab,只允许空格

  • 缩进的空格数不重要,只要相同层级的元素左对齐即可

  • '#'表示注释

数据类型

YAML 支持以下几种数据类型:

  • 对象:键值对的集合,又称为映射(mapping)/ 哈希(hashes) / 字典(dictionary)

  • 数组:一组按次序排列的值,又称为序列(sequence) / 列表(list)

  • 纯量(scalars):单个的、不可再分的值

dog:
  name: xiaohuang
  age: 3
  happy: false
  lists: [girl,dog,code]
  maps: {k1: v1,k2: v2}
  birth: 2020/12/05
  cat:
    name: xiaosan
    age:3

配置注入

@ConfigurationProperties(prefix = "dog")

需要引入spring-boot-configuration-processor包,否则会爆红

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-configuration-processor</artifactId>
    <optional>true</optional>
</dependency>

yaml中还支持占位符的写法:

age: ${random.int}

JSR303校验

Springboot中可以用@validated来校验数据,如果数据异常则会统一抛出异常,方便异常中心统一处理。

@Component  //注册bean
@ConfigurationProperties(prefix = "dog")
@Validated  //数据校验
public class Dog {
    @Email(message = "邮箱格式不正确")
    private String name;
    private Integer age;
}

使用Validated须引入spring-boot-starter-validation

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

常用验证类型

多环境切换

profile是Spring对不同环境提供不同配置功能的支持,可以通过激活不同的环境版本,实现快速切换环境

多配置文件:

我们在主配置文件编写的时候,文件名可以是 application-{profile}.properties/yml , 用来指定多个环境版本;

例如:

application-test.properties 代表测试环境配置

application-dev.properties 代表开发环境配置

但是Springboot并不会直接启动这些配置文件,它默认使用application.properties主配置文件

我们需要通过一个配置来选择需要激活的环境:

#比如在配置文件中指定使用dev环境,我们可以通过设置不同的端口号进行测试;
#我们启动SpringBoot,就可以看到已经切换到dev下的配置了;
spring.profiles.active=dev

yaml的多文档块:

和properties配置文件中一样,但是使用yml去实现不需要创建多个配置文件,更加方便了 !

server:
  port: 8081

spring:
  profiles:
    active: dev
---
server:
  port: 8082
spring:
  profiles: dev


---
server:
  port: 8083
spring:
  profiles: test

如果yml和properties同时都配置了端口,并且没有激活其他环境 , 默认会使用properties配置文件的!

配置文件加载位置:

外部加载配置文件的方式十分多,我们选择最常用的即可,在开发的资源文件中进行配置!

  • 优先级1:项目路径下的config文件夹配置文件

  • 优先级2:项目路径下配置文件

  • 优先级3:资源路径下的config文件夹配置文件

  • 优先级4:资源路径下配置文件

优先级由高到底,高优先级的配置会覆盖低优先级的配置

引入外部配置文件信息

和传统的ssm的方式一样,通过@value的注解去获取properties/yml文件中的内容 如果在yml文件中需要编写大量的自定义的配置,并且具有统一的前缀时,可以采用下方方式

@ConfigurationProperties(prefix = "aliyun")
@Component
@Data
public class AliyunProperities {
private String  xxxx;

...
}
aliyun:
  xxxx: xxxxxxxx
  ...
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-configuration-processor</artifactId>
</dependency>

最后更新于

这有帮助吗?