Spring运维之boot项目bean属性的绑定读取与校验

第三方bean属性的绑定

先写一个实体类

我们在配置yml文件里写了属性值 能一一对应

我们用注解让其对应

我们在启动类里面测试

我们首先拿到容器对象

再拿到bean 打印bean 发现我们的容器获取到的bean bean的属性与配置里面的属性一一对应

这时候提出一个问题

这是我们自定义的bean

假如我们的bean不是自定义的 而是第三方bean加载的我们该如何去操作呢

我们引入druid的依赖

重新书写

实际效果

我们现在有数据

我们要将其注入到第三方对象datasource上

我们该如何注入呢

我们同样可以用这个注解注入配置

小结

有的注解前面有一个unable

启动起来会报错

不唯一的bean定义

原因是之前那个Component主机又定义其为一个bean

这样就有冲突

我们要做的就是把之前那个定义给注释掉

总结总结

提示 processer 未进行配置

松散绑定

对于我们使用注解的时候

绑定属性的时候 我们对名称的要求其实是非常低的

照样能读取出来

这些都可以

我们发现定义在yml里面格式匹配

是随便写

我们的主流书写模式是这样的

规范的模式使用

写在测试类里面

junit

控制台展示出来了结果

注意事项

boot主要推荐我们用@ConfigurationProperties绑定属性支持属性名的松散绑定

prefix 里面的属性名全是小写和中划线

常用计量单位的应用

这里有具体的数据逻辑

但是如果数值过大

100000000000000000000就不便于读取

也不知道单位

在jdk8之后 出现了很多与时间相关的属性

定义时间

package com.example.demo.config;

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

import java.time.Duration;

//装配为spring的bean
@Component
@Data
@ConfigurationProperties(prefix = "servers")
public class ServerConfig {
    private String ipAddress;
    private int port;
    private long timeout;

    // 服务器超时时间
    private Duration serverTimeOut;
}

这边输出就是秒

用注解自定义时间的格式类型

SpringBoot支持JDK8提供的时间与空间计量的单位

package com.example.demo.config;

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.convert.DataSizeUnit;
import org.springframework.boot.convert.DurationUnit;
import org.springframework.stereotype.Component;
import org.springframework.util.unit.DataSize;
import org.springframework.util.unit.DataUnit;

import java.time.Duration;
import java.time.temporal.ChronoUnit;

//装配为spring的bean
@Component
@Data
@ConfigurationProperties(prefix = "servers")
public class ServerConfig {
    private String ipAddress;
    private int port;
    private long timeout;

    @DurationUnit(ChronoUnit.HOURS)
    // 服务器超时时间
    private Duration serverTimeOut;

    @DataSizeUnit(DataUnit.MEGABYTES)
    // 文件存储的单位 MB
    private DataSize dataSize;
}

小结

计量单位

bean属性校验

当我们配置bean的时候

会有一个属性配置错误

配置错误也找不出来

如果我们有一个校验就好了

开启数据校验有助于系统的安全性

J2EE规范中的JSR303规范定义了一组有关数据校验相关的API

<dependency>
   <groupId>javax.validation</groupId>
   <artifactId>validation-api</artifactId>
   <version>2.0.1.Final</version>
</dependency>

在xml文件里引入坐标

这个东西相当于JDBC技术

JDBC是接口

不是实现类

实现类仅仅是Mysql的驱动

我们写了一堆接口 jdbc是一套规范

Mysql才是实现类

jdbc是一套规范

引入依赖后我们可以开启对当前bean的属性注入校验

校验注解

@Validated

但是我们还没有对指定的字段进行校验

用Validated提供的注解

增加校验规则

但是这样我们只是书写了接口

没有书写实现类

我们还要加一个Hibernate的校验器

我们首先要引入依赖

<dependency>
   <groupId>org.hibernate.validator</groupId>
   <artifactId>hibernate-validator</artifactId>
   <version>8.0.1.Final</version>
</dependency>

使用hibernate提供的校验器做实现类

<!--导入JSR303规范-->
<dependency>
    <groupId>javax.validation</groupId>
    <artifactId>validation-api</artifactId>
    <version>2.0.1.Final</version>
</dependency>

<!--使用hibernate框架提供的校验器做实现类-->
<dependency>
    <groupId>org.hibernate.validator</groupId>
    <artifactId>hibernate-validator</artifactId>
    <version>8.0.1.Final</version>
</dependency>

控制台就会打印信息

小结

小结

进制数据转换的规则

注入配置文件

yaml的语法规则

以后我们在做程序的时候

输入的密码被识别成八进制数 转化为10进制

我们推荐的是 纯字符串就用字符串

""引号 包裹

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/685491.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C++设计模式-外观模式,游戏引擎管理多个子系统,反汇编

运行在VS2022&#xff0c;x86&#xff0c;Debug下。 30. 外观模式 为子系统定义一组统一的接口&#xff0c;这个高级接口会让子系统更容易被使用。应用&#xff1a;如在游戏开发中&#xff0c;游戏引擎包含多个子系统&#xff0c;如物理、渲染、粒子、UI、音频等。可以使用外观…

组态软件远程监控

在信息化、智能化的浪潮下&#xff0c;远程监控技术已经渗透到工业生产的各个领域。HiWoo Cloud平台凭借其卓越的组态软件远程监控功能&#xff0c;为企业提供了高效、智能的监控解决方案&#xff0c;推动了工业生产的数字化转型。本文将详细介绍HiWoo Cloud平台在组态软件远程…

【机器学习】GLM4-9B-Chat大模型/GLM-4V-9B多模态大模型概述、原理及推理实战

​​​​​​​ 目录 一、引言 二、模型简介 2.1 GLM4-9B 模型概述 2.2 GLM4-9B 模型架构 三、模型推理 3.1 GLM4-9B-Chat 语言模型 3.1.1 model.generate 3.1.2 model.chat 3.2 GLM-4V-9B 多模态模型 3.2.1 多模态模型概述 3.2.2 多模态模型实践 四、总结 一、引言…

cocos入门4:项目目录结构

Cocos Creator 项目结构教程 Cocos Creator 是一个功能强大的游戏开发工具&#xff0c;它为开发者提供了直观易用的界面和强大的功能来快速创建游戏。在使用 Cocos Creator 开发游戏时&#xff0c;合理地组织项目结构对于项目的可维护性和扩展性至关重要。以下是一个关于如何设…

49.线程池的关闭方法

shutdown方法 1.线程池状态变为shutdown 2.不会接收新任务 3.已提交的任务会执行完 4.此方法不会阻塞调用线程执行 ExecutorService executorService = Executors.newFixedThreadPool(2);executorService.submit(() -> {log.debug("task1 running");try {TimeUnit…

可视化数据科学平台在信贷领域应用系列五:零代码可视化建模

信贷风控模型是金融机构风险管理的核心工具&#xff0c;在信贷风险管理工作中扮演着至关重要的角色。随着信贷市场的环境不断变化&#xff0c;信贷业务的风险日趋复杂化和隐蔽化&#xff0c;开发和应用准确高效的信贷风控模型显得尤为重要。信贷风险控制面临着越来越大的挑战和…

Go实战 | 使用Go-Fiber采用分层架构搭建一个简单的Web服务

前言 &#x1f4e2;博客主页&#xff1a;程序源⠀-CSDN博客 &#x1f4e2;欢迎点赞&#x1f44d;收藏⭐留言&#x1f4dd;如有错误敬请指正&#xff01; 一、环境准备、示例介绍 Go语言安装&#xff0c;GoLand编辑器 这个示例实现了一个简单的待办事项&#xff08;todo&#xf…

【Linux网络】传输层协议 - UDP

文章目录 一、传输层&#xff08;运输层&#xff09;运输层的特点复用和分用再谈端口号端口号范围划分认识知名端口号&#xff08;Well-Know Port Number&#xff09;两个问题① 一个进程是否可以绑定多个端口号&#xff1f;② 一个端口号是否可以被多个进程绑定&#xff1f; n…

暗黑系短视频:成都鼎茂宏升文化传媒公司

暗黑系短视频&#xff1a;探索未知的视觉艺术 在短视频盛行的今天&#xff0c;各种风格和主题的作品层出不穷&#xff0c;其中&#xff0c;暗黑系短视频以其独特的魅力和深度&#xff0c;成都鼎茂宏升文化传媒公司吸引了众多观众的关注。这类视频往往带有一种神秘、压抑的氛围…

规则引擎LiteFlow发布v2.12.1版本,决策路由特性

个人博客&#xff1a;无奈何杨&#xff08;wnhyang&#xff09; 个人语雀&#xff1a;wnhyang 共享语雀&#xff1a;在线知识共享 Github&#xff1a;wnhyang - Overview 简介 标题其实是不准确的&#xff0c;了解过的会知道在LiteFlow的2.12.0已经有了决策路由的特性&…

Redis-Cluster模式基操篇

一、场景 1、搞一套6个主节点的Cluster集群 2、模拟数据正常读写 3、模拟单点故障 4、在不停服务的情况下将集群架构改为3主3从 二、环境规划 6台独立的服务器&#xff0c;端口18001~18006 192.169.14.121 192.169.14.122 192.169.14.123 192.169.14.124 192.169.14.125 192…

XR模拟的巨大飞跃,Varjo如何塑造战斗机飞行员培训的未来

随着虚拟现实技术的不断发展&#xff0c;拥有直通功能的XR技术被广泛应用于各种虚拟培训项目之中&#xff0c;能够完美混合虚拟与现实环境的XR技术能够最大限度的优化培训效果并有效减少仿真培训中的成本消耗。 技术总部位于加利福尼亚州南旧金山的Aechelon是集培训、模拟和娱乐…

【简单讲解下TalkingData】

&#x1f308;个人主页: 程序员不想敲代码啊 &#x1f3c6;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f44d;点赞⭐评论⭐收藏 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共…

PPT视频如何16倍速或者加速播放

有两种方式&#xff0c;一种是修改PPT本身&#xff0c;这种方式非常繁琐&#xff0c;不太推荐&#xff0c;还有一种就是修改视频本身&#xff0c;直接让视频是16倍速的视频即可。 如何让视频16倍速&#xff0c;我建议人生苦短&#xff0c;我用Python&#xff0c;几行代码&…

docker-compose部署 kafka 3.7 集群(3台服务器)并启用账号密码认证

文章目录 1. 规划2. 服务部署2.1 kafka-012.2 kafka-022.3 kafka-032.4 启动服务 3. 测试3.1 kafkamap搭建&#xff08;测试工具&#xff09;3.2 测试 1. 规划 服务IPkafka-0110.10.xxx.199kafka-0210.10.xxx.198kafka-0310.10.xxx.197kafkamp10.10.xxx.199 2. 服务部署 2.1…

Mysql学习(三)——SQL通用语法之DML

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 DML添加数据修改数据删除数据 总结 DML DML用来对数据库中表的数据记录进行增删改操作。 添加数据 -- 给指定字段添加数据 insert into 表名(字段1&#xff0c;字…

逻辑回归及python实现

概述 logistic回归是一种广义线性回归&#xff08;generalized linear model&#xff09;&#xff0c;因此与多重线性回归分析有很多相同之处。它们的模型形式基本上相同&#xff0c;都具有 w‘xb&#xff0c;其中w和b是待求参数&#xff0c;其区别在于他们的因变量不同&#x…

Java Web学习笔记15——DOM对象

DOM&#xff1a; 概念&#xff1a;Document Object Model&#xff1a; 文档对象模型 将标记语言的各个组成部分封装为对应的对象&#xff1a; Document: 整个文档对象 Element&#xff1a;元素对象 Attribute&#xff1a; 属性对象 Text&#xff1a;文本对象 Comment&a…

STM32-16-ADC

STM32-01-认识单片机 STM32-02-基础知识 STM32-03-HAL库 STM32-04-时钟树 STM32-05-SYSTEM文件夹 STM32-06-GPIO STM32-07-外部中断 STM32-08-串口 STM32-09-IWDG和WWDG STM32-10-定时器 STM32-11-电容触摸按键 STM32-12-OLED模块 STM32-13-MPU STM32-14-FSMC_LCD STM32-15-DMA…

麒麟操作系统rpm ivh安装rpm包卡死问题分析

夜间变更开发反应,rpm -ivh 安装包命令夯死,无执行结果,也无报错 排查 : 1、top 查看无进程占用较高进程存在,整体运行平稳 2、df -h 查看磁盘并未占满 3、其他服务器复现该命令正常执行 4、ps -ef|grep rpm 查看安装命令仍在运行中 5、查看log日志,均正常并无不良日志…