栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

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

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

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

创建一个普通的springboot工程:

 

一、ConfigurationProperties注解 1.1、自定义bean使用ConfigurationProperties注解

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

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

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

 实体类MyDataEnterprise:

package com.Bivin.config;

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;



@Data   // 该注解是快速开发实体类的(使用该注解不用再写toString、getter、setter方法了,已经写好了)别忘记导lombok坐标
@Component  // bean注解
@ConfigurationProperties(prefix = "servers")
public class MyDataEnterprise {

    private String ipAddress;
    private int port;
    private long timeout;

}

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的意义是一样的:

package com.Bivin;

import com.Bivin.config.MyDataEnterprise;
import com.alibaba.druid.pool.DruidDataSource;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.annotation.Bean;

@SpringBootApplication
public class Springboot07ConfigurationApplication {


    
    @Bean
    public DruidDataSource dataSource(){
        DruidDataSource dataSource = new DruidDataSource();
        // 手动给第三方bean的属性(driverClassName属性)赋值
        dataSource.setDriverClassName("com.mysql.jdbc.Driver123");
        return dataSource;
    }

    
    public static void main(String[] args) {

        ConfigurableApplicationContext run = SpringApplication.run(Springboot07ConfigurationApplication.class, args);

        // 获取bean
        DruidDataSource bean = run.getBean(DruidDataSource.class);

        // 获取bean对象的DriverClassName属性值
        System.out.println(bean.getDriverClassName());
    }

}

 但是思考:我们第三方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的属性中,要不然你就别想了:

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1040262.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号