yml properties 在线转化工具 idea yml转properties_数据校验


1、注入配置文件值-@ConfigurationProperties

yml配置文件:


person:
  lastName: lurenyin
  age: 20
  student: true
  birth: 1999/06/28
  maps: {k1: v1,k2: v2}
  lists:
    - lurenyan
    - springboot
  Dog:
    name: 狗子
    age: 3


javaBean:


/**
 * @ConfigurationProperties告诉SpringBoot将本类中的所有属性和配置文件中相关的配置进行绑定;
 * prefix = "person" 用来指明配置文件中哪个下面的所有属性进行一一映射;
 * 只有这个组件是容器中的组件,才能使用容器提供的@ConfigurationProperties功能;
 */
@Component
@ConfigurationProperties(prefix = "person")
public class Person {
    private String lastName;
    private Integer age;
    private Boolean student;
    private Date birth;

    private Map<String,Object> maps;
    private List<Object> lists;
    private Dog dog;
    // 省略getter和setter方法以及toString
}


在此之前可以先导入配置文件处理器,这样我们以后在编写配置文件时就有提示啦!


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


2、properties配置文件的编码问题

接下来我们看一下properties配置文件的编写:


person.last-name=路人寅
person.age=20
person.student=true
person.birth=1999/06/28
person.maps.k1=v1
person.maps.k2=v2
person.lists=lurenyin,springboot
person.dog.name=狗子
person.dog.age=3


这样我们在启动测试运行的时候就可以看到打印输出结果了:


yml properties 在线转化工具 idea yml转properties_idea yml变成文件了_02


但是我们会发现我们的中文输出结果是乱码!原因是IDEA使用的是UTF-8编码,而properties文件使用的是ASCII编码,所以在运行时需要转成ASCII编码,我们需要修改以下设置:


yml properties 在线转化工具 idea yml转properties_数据校验_03


这样乱码的问题就解决了:


yml properties 在线转化工具 idea yml转properties_idea yml变成文件了_04


3、注入配置文件值-@Value方法

yml配置文件同上;

javaBean:


/**
 * Value值可以是字面量/${key}从配置文件中获取的值/#{SpEL}
 * 这里我只注入了三个作为测试
 */
@Component
public class Person {
    @Value("${person.lastName}")
    private String lastName;
    @Value("#{11*2}")
    private Integer age;
    @Value("true")
    private Boolean student;
    private Date birth;

    private Map<String,Object> maps;
    private List<Object> lists;
    private Dog dog;
    //省略getter和setter方法以及toString
}


运行结果如下:


yml properties 在线转化工具 idea yml转properties_配置文件_05


4、@Value获取值和@ConfigurationProperties获取值比较

@ConfigurationProperties

@Value

功能

批量注入配置文件中的属性

单个注入

松散语法

支持

不支持

SpEL

不支持

支持

JSR 303数据校验

支持

不支持

复杂类型封装

支持

不支持

  • 那松散语法该怎样理解呢?直白的上个例子:

先上个小知识点:属性名匹配规则:

标准方式:person.lastName
方式一:person.first-name
方式二:person.first_name

以上三种方式都可以使用;

properties配置文件里是这样滴:


yml properties 在线转化工具 idea yml转properties_spring_06


@ConfigurationProperties支持松散语法是这样的情况,用@ConfigurationProperties方法注入:


yml properties 在线转化工具 idea yml转properties_配置文件_07


这个运行是不会报错的,这里我就不运行啦~

@Value不支持松散语法是这样滴,用@Value方法注入:


yml properties 在线转化工具 idea yml转properties_idea yml变成文件了_08


lastName与配置文件里的last-name不一致,这个结果会报错!

  • SpEL(Spring Expression Language),即Spring表达式语言,上个例子叭~

@ConfigurationProperties注入不支持SpEL:下面这种写法就是不可以的!


yml properties 在线转化工具 idea yml转properties_spring_09


@Value注入支持SpEL:


yml properties 在线转化工具 idea yml转properties_配置文件_10


  • JSR 303数据校验也举个例子叭~

使用JSR 303数据校验要先加@Validated注解,还要导入下面的依赖:


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


这里我拿@Email来测试,JSR 303 基本的校验规则可参看JSR303 | 易学教程

测试如下:


yml properties 在线转化工具 idea yml转properties_数据校验_11


由于lurenyin不是邮箱格式,所以会报错,@Email校验起了作用,所以支持JSR 303校验。


yml properties 在线转化工具 idea yml转properties_数据校验_12


@Value方法直接忽略JSR 303校验!所以不支持!

  • 一个最主要的区别是@Value不支持复杂类型封装:


yml properties 在线转化工具 idea yml转properties_配置文件_13


所以具体要使用哪种方式注入配置文件值,大家可以细细斟酌一下喔~


yml properties 在线转化工具 idea yml转properties_数据校验_14


如果感觉有用的话可以给个赞不呀~