zoukankan      html  css  js  c++  java
  • 【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 

     在代码中实际应用

    启动应用程序

     

     测试结果:

  • 相关阅读:
    sublime打开txt文件乱码的问题
    while循环小例
    mongoDB内置文档定义
    WebStorm 10.0.3注册码
    angularjs之ng-mode获取lobject类型里的键值
    前端打印console
    js去掉数组的空字符串
    js数组去重的三种方式的比较
    js数据类型之判断
    Bootstrap中的datetimepicker浅谈
  • 原文地址:https://www.cnblogs.com/clarino/p/12001439.html
Copyright © 2011-2022 走看看