当前位置:网站首页>第三方bean使用ConfigurationProperties注解获取yml配置文件数据 & 获取yml配置文件数据的校验
第三方bean使用ConfigurationProperties注解获取yml配置文件数据 & 获取yml配置文件数据的校验
2022-08-09 17:15:00 【lwj_07】
=========================================================================
创建一个普通的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;
/**
* MyDataEnterprise类: 该类就是用来获取封装yml配置文件中的数据的
*
* 注意一:一定要保证该类中的属性名要和yml配置文件的配置名一致,要不然封装不到数据
*
* 注意二:把该实体类配置成bean注解的目的是因为:该实体类是用来封装yml配置文件中的一些数据的,
* 所以应该受spring管控,因此配置成bean的形式
*
* 注意三:@ConfigurationProperties(prefix = "servers")注解的作用:就是获取yml配置文件中的
* servers里面的数据,把yml配置文件中的servers里面的数据封装到该实体类的属性中
* (要保证servers里面的属性名和实体类中的属性名一致才能进行封装获取)
*/
@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: Druid
*
* 在这里使用@Bean注解 和 上面我们自定义的bean形式是一样的
* 相当于说MyDataEnterprise的代码在这里面写了
*/
@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的属性中,要不然你就别想了:
边栏推荐
- 【ROS2原理9】 QoS - 截止日期、活跃度和寿命
- win10 uwp 让焦点在点击在页面空白处时回到textbox中
- CPU状态信息us,sy,ni,id,wa,hi,si,st含义
- mysql生成随机姓名、手机号、日期
- JSDN博客系统
- 总结篇4:redis 核心数据存储结构及核心业务模型实现应用场景
- win10 uwp 获得Slider拖动结束的值
- LINE Verda Programming Contest (AtCoder Beginner Contest 263) A~E 题解
- What is test development and why is it so popular now?
- The difference between approach and method
猜你喜欢
Cortex-A7 MPCore Architecture
2022 全球 AI 模型周报
The difference between approach and method
[Pycharm easy to use function]
华为云全流程护航《流浪方舟》破竹首发,打造口碑爆款
What platform is EPIC?
艺术与科技的狂欢,云端XR支撑阿那亚2022砂之盒沉浸艺术季
逻辑越权和水平垂直越权支付篡改,验证码绕过,接口
使用mysql:5.6和 owncloud 镜像,构建一个个人网盘
The most complete architect knowledge map in history
随机推荐
ref的使用
手写flexible.js的原理实现,我终于明白移动端多端适配
The senior told me that the MySQL of the big factory is connected through SSH
Ark: Survival Evolved Open Server Port Mapping Tutorial
mysql如何查看所有复合主键的表名?
国能准能集团研发矿山数字孪生系统 填补国内采矿行业空白
体验远超Hue,这才是技术人员最喜欢的SQL工具
win10 uwp 设置启动窗口大小 获取窗口大小
动态RDLC报表(三)
本机号码一键登录原理
ARM Assembly Basics
.NET 6学习笔记(4)——解决VS2022中Nullable警告
从事软件测试一年,只会基础的功能测试,怎么进一步学习?
jmeter - record script
URLError: <urlopen error [Errno 11004] getaddrinfo failed>调用seaborn-data无法使用
LeetCode做题小结
使用mysql:5.6和 owncloud 镜像,构建一个个人网盘
神秘的程序员(20-30)
[Pycharm easy to use function]
Logic unauthorized and horizontal and vertical unauthorized payment tampering, verification code bypass, interface