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

简介: 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;
}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;
}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进制

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

""引号 包裹

目录
相关文章
|
4天前
|
Java Maven 开发工具
IDEA使用Spring Initializr流畅的创建springboot项目
IDEA使用Spring Initializr流畅的创建springboot项目
21 0
|
4天前
|
运维 Java 测试技术
Spring运维之boo项目表现层测试加载测试的专用配置属性以及在JUnit中启动web服务器发送虚拟请求
Spring运维之boo项目表现层测试加载测试的专用配置属性以及在JUnit中启动web服务器发送虚拟请求
11 3
|
23小时前
|
IDE Java 机器人
Spring Boot中的多模块项目构建
Spring Boot中的多模块项目构建
|
3天前
|
消息中间件 XML Java
经验大分享:spring项目在启动的时候执行方法初始化
经验大分享:spring项目在启动的时候执行方法初始化
|
1月前
|
运维 Linux 程序员
最全树莓派4B安装64位Linux(不用显示器键盘鼠标),Linux运维面试送分题
最全树莓派4B安装64位Linux(不用显示器键盘鼠标),Linux运维面试送分题
最全树莓派4B安装64位Linux(不用显示器键盘鼠标),Linux运维面试送分题
|
25天前
|
运维 Linux Shell
运维:Linux服务器崩了怎么办,快来看看这份”急救命令指南“吧!
当服务器出现问题,如崩溃、内存耗尽或CPU使用率过高时,运维工程师需要保持冷静,并通过一系列Shell命令来诊断和解决。首先,检查是否有异常SSH登录活动,查看`/etc/passwd`和`.bash_history`文件,以及用户最近的登录信息。接着,监控网络连接和端口,使用`netstat`和`lsof`命令找出资源占用高的进程,并查看进程启动时间和详细信息。同时,排查可能的恶意文件,检查定时任务和服务配置以确保没有异常启动项。最后,分析系统日志,如`/var/log`目录下的各种日志文件,找出潜在问题。通过这些步骤,可以有效定位和解决服务器故障。
|
1月前
|
消息中间件 运维 Linux
运维最全Linux 命令大全之scp命令_linux scp 指令(1),2024年最新从消息中间件看分布式系统的多种套路
运维最全Linux 命令大全之scp命令_linux scp 指令(1),2024年最新从消息中间件看分布式系统的多种套路
|
1月前
|
运维 Linux Docker
ChatGLM3在Docker环境部署(1),Linux运维电话面试技巧
ChatGLM3在Docker环境部署(1),Linux运维电话面试技巧
|
1月前
|
运维 Linux Docker
ChatGLM3在Docker环境部署,Linux运维免打包多渠道统计如何实现
ChatGLM3在Docker环境部署,Linux运维免打包多渠道统计如何实现
|
1月前
|
运维 关系型数据库 MySQL
day03-Linux运维-Xshell优化和Linux系统命令入门(2)
day03-Linux运维-Xshell优化和Linux系统命令入门(2)
day03-Linux运维-Xshell优化和Linux系统命令入门(2)