1、注入配置文件值-@ConfigurationProperties
yml配置文件:
person
javaBean:
/**
在此之前可以先导入配置文件处理器,这样我们以后在编写配置文件时就有提示啦!
<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
这样我们在启动测试运行的时候就可以看到打印输出结果了:
但是我们会发现我们的中文输出结果是乱码!原因是IDEA使用的是UTF-8编码,而properties文件使用的是ASCII编码,所以在运行时需要转成ASCII编码,我们需要修改以下设置:
这样乱码的问题就解决了:
3、注入配置文件值-@Value方法
yml配置文件同上;
javaBean:
/**
运行结果如下:
4、@Value获取值和@ConfigurationProperties获取值比较
@ConfigurationProperties | @Value | |
功能 | 批量注入配置文件中的属性 | 单个注入 |
松散语法 | 支持 | 不支持 |
SpEL | 不支持 | 支持 |
JSR 303数据校验 | 支持 | 不支持 |
复杂类型封装 | 支持 | 不支持 |
- 那松散语法该怎样理解呢?直白的上个例子:
先上个小知识点:属性名匹配规则:
标准方式:person.lastName
方式一:person.first-name
方式二:person.first_name
以上三种方式都可以使用;
properties配置文件里是这样滴:
@ConfigurationProperties支持松散语法是这样的情况,用@ConfigurationProperties方法注入:
这个运行是不会报错的,这里我就不运行啦~
@Value不支持松散语法是这样滴,用@Value方法注入:
lastName与配置文件里的last-name不一致,这个结果会报错!
- SpEL(Spring Expression Language),即Spring表达式语言,上个例子叭~
@ConfigurationProperties注入不支持SpEL:下面这种写法就是不可以的!
@Value注入支持SpEL:
- JSR 303数据校验也举个例子叭~
使用JSR 303数据校验要先加@Validated注解,还要导入下面的依赖:
<dependency>
这里我拿@Email来测试,JSR 303 基本的校验规则可参看JSR303 | 易学教程
测试如下:
由于lurenyin不是邮箱格式,所以会报错,@Email校验起了作用,所以支持JSR 303校验。
@Value方法直接忽略JSR 303校验!所以不支持!
- 一个最主要的区别是@Value不支持复杂类型封装:
所以具体要使用哪种方式注入配置文件值,大家可以细细斟酌一下喔~