• 第三方bean使用ConfigurationProperties注解获取yml配置文件数据 & 获取yml配置文件数据的校验


    =========================================================================

    创建一个普通的springboot工程:

     

    一、ConfigurationProperties注解

    1.1、自定义bean使用ConfigurationProperties注解

    yaml数据格式笔记中我们学过,该ConfigurationProperties注解的作用:就是通过该注解把yml配置文件中的数据封装到实体类的属性当中,注意:yml配置文件中的数据属性名要和实体类当中的属性名一致,要不然封装不上数据(忘记的话看笔记)

    代码演示ConfigurationProperties注解的作用如下所示:

    yml配置文件中的数据如下所示:

     实体类MyDataEnterprise:

    1. package com.Bivin.config;
    2. import lombok.Data;
    3. import org.springframework.boot.context.properties.ConfigurationProperties;
    4. import org.springframework.stereotype.Component;
    5. /**
    6. * MyDataEnterprise类: 该类就是用来获取封装yml配置文件中的数据的
    7. *
    8. * 注意一:一定要保证该类中的属性名要和yml配置文件的配置名一致,要不然封装不到数据
    9. *
    10. * 注意二:把该实体类配置成bean注解的目的是因为:该实体类是用来封装yml配置文件中的一些数据的,
    11. * 所以应该受spring管控,因此配置成bean的形式
    12. *
    13. * 注意三:@ConfigurationProperties(prefix = "servers")注解的作用:就是获取yml配置文件中的
    14. * servers里面的数据,把yml配置文件中的servers里面的数据封装到该实体类的属性中
    15. * (要保证servers里面的属性名和实体类中的属性名一致才能进行封装获取)
    16. */
    17. @Data // 该注解是快速开发实体类的(使用该注解不用再写toString、getter、setter方法了,已经写好了)别忘记导lombok坐标
    18. @Component // bean注解
    19. @ConfigurationProperties(prefix = "servers")
    20. public class MyDataEnterprise {
    21. private String ipAddress;
    22. private int port;
    23. private long timeout;
    24. }

    springboot引导类(也可以获取bean对象,忘记的话看前面笔记):

     会发现,通过ConfigurationProperties注解,yml配置文件中的数据确实封装到了实体类的属性当中了。

    1.2、第三方bean使用ConfigurationProperties注解

    思考:上面我们用一个 bean(bean:对象) 加上ConfigurationProperties注解的时候,可以把yml配置文件中的一些数据封装到该bean的属性当中,我们上面演示的是自定义的bean,如果这个bean不是我们自定义的呢?假如是一个第三方的bean呢:

    因此第三方bean的时候,通过该注解形式如何把yml配置文件中的数据封装到第三方bean的属性当中呢: 

    模拟第三方bean:Druid (别忘记导入Druid的坐标)

    代码演示如下所示:

    下面演示的代码只不过是把第三方bean写在了引导类当中的@Bean注解当中了,实际意思还是和我们自定义的bean的意义是一样的:

    1. package com.Bivin;
    2. import com.Bivin.config.MyDataEnterprise;
    3. import com.alibaba.druid.pool.DruidDataSource;
    4. import org.springframework.boot.SpringApplication;
    5. import org.springframework.boot.autoconfigure.SpringBootApplication;
    6. import org.springframework.context.ConfigurableApplicationContext;
    7. import org.springframework.context.annotation.Bean;
    8. @SpringBootApplication
    9. public class Springboot07ConfigurationApplication {
    10. /**
    11. * 第三方bean: Druid
    12. *
    13. * 在这里使用@Bean注解 和 上面我们自定义的bean形式是一样的
    14. * 相当于说MyDataEnterprise的代码在这里面写了
    15. */
    16. @Bean
    17. public DruidDataSource dataSource(){
    18. DruidDataSource dataSource = new DruidDataSource();
    19. // 手动给第三方bean的属性(driverClassName属性)赋值
    20. dataSource.setDriverClassName("com.mysql.jdbc.Driver123");
    21. return dataSource;
    22. }
    23. public static void main(String[] args) {
    24. ConfigurableApplicationContext run = SpringApplication.run(Springboot07ConfigurationApplication.class, args);
    25. // 获取bean
    26. DruidDataSource bean = run.getBean(DruidDataSource.class);
    27. // 获取bean对象的DriverClassName属性值
    28. System.out.println(bean.getDriverClassName());
    29. }
    30. }

     但是思考:我们第三方bean的属性值是我们手动进行赋值的,我们能不能把第三方bean的属性值写在yml配置文件中,然后通过某种注解,封装到第三方bean的属性中呢:

    当然可以演示如下所示:(同样要保证yml配置文件中的配置名要和bean的属性名一致,要不然封装不上数据)

    通过ConfigurationProperties注解,把yml配置文件中的数据直接封装到第三方bean的属性当中

    1.3、解除使用ConfigurationProperties注解警告

    二、宽松绑定

     注1:宽松绑定下面四种写法只适用于@ConfigurationProperties注解当中(可以让实体类的属性名和yml配置文件中的配置名不一致,同样可以把yml文件中数据封装到实体类的属性当中),在@Value注解当中就不能使用宽松绑 定的那四种形式了(要保证yml配置文件中的配置名和实体类的或者属性的属性名保持一致,那么才能封装上yml配置文件中的数据)

    注2:但是使用了上面的宽松绑定的四种yml配置文件中配置名的写法后,要想通过@ConfiggurationProperties(prefix="#")注解获取到用上面四种方式写的yml配置文件中的配置名数据的话,要遵守以下规则:

     这里演示的是datasource的配置名, 如果上面的yml配置文件中的servers:.... 数据,servers配置名写成Servers形式,那么通过@ConfigurationProperties(prefix="servers")注解的形式获取yml配置文件中的Servers数据的时候,这个prefix里面就要纯小写形式servers才能获取到yml配置文件中的Servers配置名中的数据

    三、常用计量单位

     代码演示如下:

     

     

     

    四、bean属性数据校验

    也就是说,bean中的属性通过@ConfigurationProperties注解获取yml配置文件中的某些数据,在获取yml配置文件数据的时候,进行一下属性数据的校验,比如说bean中的time属性只想接收0-24之间的数字,因此我们就需要通过校验器进行一下校验判断yml配置文件中的time配置名中的数据是否在0-24之间,如果在的话再通过@ConfigurationProperties注解把yml配置文件中的数据封装到time属性中,如果不在就不封装

    4.1、实现步骤如下所示:

    这两个坐标一个都不能少,第一个是:JSR303校验坐标,第二个是:校验器坐标,

     

     注意:设置校验规则的时候,可以设定很多的规则,这里只展示了最大值,还可以有最小值等

     代码演示如下所示:

     当yml配置文件中的time数据不超过400的时候:

     

    可以发现确实通过@ConfigurationProperties注解把yml配置文件中的数据封装到bean相对应的属性当中了

     

    当yml配置文件中的数据超过校验规则400的最大400后,会发现再通过@ConfigurationProperties注解也获取不到yml配置文件中的数据也封装不到bean的属性当中了,因为设定规则了,除非yml中的数据在设置的规则内,那么才能把yml配置中的数据封装到我bean的属性中,要不然你就别想了:

     

  • 相关阅读:
    前端性别判断
    【Redis实战】黑马点评项目
    verilog实现AM调制及仿真验证
    Codigger的项目代码检测工具:特性和优势
    【免杀前置课——Windows编程】七、资源操作(图标资源添加、实现菜单窗口、实现右键下拉菜单、实现对话框资源添加)(附代码)
    【学习笔记04】认识npm
    HTTP协议及Servlet类笔记
    【云原生】SpringCloud-Spring Boot Starter使用测试
    NodeMcu arduino ESP8266 搭建mqtt服务(然也物联)以及使用
    java毕业设计软件源代码SSM家庭理财|个人理财管理系统|记账系统
  • 原文地址:https://blog.csdn.net/lwj_07/article/details/126229238