【SpringBoot-02】配置类 @ConfigurationPeroperties vs @Value @Validate

尚硅谷SpringBoot视频 P10~P13

配置:通过如下其中一种中参数定义,可修改springboot中默认的参数

1、application.properties

如:server.port=8081

2、application.yaml,配置样例

server:

  port: 8081

应用示例:

 1 public class Person {
 2     private String lastName;
 3     private Integer age;
 4     private Boolean boss;
 5     private Date birth;
 6 
 7     private Map<String ,Object> maps;
 8     private List<Object> lists;
 9     private Dog dog;
10 
11     ....
12 }
13 
14 public class Dog{
15     private String name;
16     private Integer age;
17     ... 
18 }

yaml配置如下:

 1 person:
 2     lastName: hello
 3     age: 18
 4     boss: false
 5     birth: 2017/12/12
 6     maps:{k1: v1, k2: 12}
 7     lists:
 8         - lisi
 9         - zhaoliu
10     dog:
11         name: 小狗
12         age: 12

改造:增加注解,实现配置文件中属性映射到bean; @ConfigurationPeroperties(prefix = "person")


/**
* 将配置文件中配置的每个属性的值,映射到这个组件中
* @ConfigurationProperties 告诉 SpringBoot将本类中所有属性和配置文件中相关配置绑定
* prefix = "person" 配置文件中哪个下面的所有属性一一映射
*/


@Component
@ConfigurationPeroperties(prefix = "person")
public class Person {
private String lastName;
private Integer age;
private Boolean boss;
private Date birth;

.... // 包含getter/setter/toString方法

Pom.xml增加依赖

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

<!--  Spring Test 插件-->
<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-test</artifactId>
   <scope>test</scope>
</dependency>

配置spring test类,验证效果

 


使用application.properties(先将原有yaml文件中使用#注释,可直接用快捷键 Ctrl+/实现快速屏蔽)

Person.last-name=lisi
Person.age=18
Person.boss=false
Person.birth=2019/12/12
Person.maps.k1=v1
Person.maps.k2=14
Person.lists=a,b,c

重新Test执行效果:

说明:如果配置文件中配置中文打印乱码则是工程字符集问题(Properties文件模式GBK编码,需调整UTF-8),参考如下调整。

Properties中配置名字 你好,但是控制台打印  Person{lastName='���',

 

 修正后的打印效果:


@Value 注解测试

测试

@Component
//@ConfigurationProperties(prefix = "Person")
public class Person {

    @Value("${Person.last-name}")
    private String lastName;
    @Value("#{11*2}")
    private Integer age;
    @Value("true")
    private Boolean boss;
    private Date birth;

执行效果:


  @ConfigurationPeroperties : 批量注入文件中属性,不支持SpEL语法,JSR303校验

 @Value: 一个个指定文件中属性;支持SpEL语法,不支持JSR303校验;不支持复杂类型注解(如map)

Validate JSR 303的使用:会提示lastName格式报错


两个注解使用场景的区别

 如果仅在某个业务逻辑中获取配置文件中某个值,使用@Value;否则使用@ConfigurationPeroperties 

 在代码中实际应用

启动应用程序

 

 测试结果:

原文地址:https://www.cnblogs.com/clarino/p/12001439.html