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进制

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

""引号 包裹

目录
相关文章
|
3月前
|
XML Java 测试技术
Spring IOC—基于注解配置和管理Bean 万字详解(通俗易懂)
Spring 第三节 IOC——基于注解配置和管理Bean 万字详解!
265 26
|
5月前
|
XML 安全 Java
|
4月前
|
XML Java 应用服务中间件
Spring Boot 两种部署到服务器的方式
本文介绍了Spring Boot项目的两种部署方式:jar包和war包。Jar包方式使用内置Tomcat,只需配置JDK 1.8及以上环境,通过`nohup java -jar`命令后台运行,并开放服务器端口即可访问。War包则需将项目打包后放入外部Tomcat的webapps目录,修改启动类继承`SpringBootServletInitializer`并调整pom.xml中的打包类型为war,最后启动Tomcat访问应用。两者各有优劣,jar包更简单便捷,而war包适合传统部署场景。需要注意的是,war包部署时,内置Tomcat的端口配置不会生效。
1313 17
Spring Boot 两种部署到服务器的方式
|
2月前
|
Java 数据库 微服务
微服务——SpringBoot使用归纳——Spring Boot中的项目属性配置——指定项目配置文件
在实际项目中,开发环境和生产环境的配置往往不同。为简化配置切换,可通过创建 `application-dev.yml` 和 `application-pro.yml` 分别管理开发与生产环境配置,如设置不同端口(8001/8002)。在 `application.yml` 中使用 `spring.profiles.active` 指定加载的配置文件,实现环境快速切换。本节还介绍了通过配置类读取参数的方法,适用于微服务场景,提升代码可维护性。课程源码可从 [Gitee](https://gitee.com/eson15/springboot_study) 下载。
67 0
|
5月前
|
存储 Java Spring
【Spring】获取Bean对象需要哪些注解
@Conntroller,@Service,@Repository,@Component,@Configuration,关于Bean对象的五个常用注解
120 12
|
5月前
|
存储 Java 应用服务中间件
【Spring】IoC和DI,控制反转,Bean对象的获取方式
IoC,DI,控制反转容器,Bean的基本常识,类注解@Controller,获取Bean对象的常用三种方式
121 12
|
5月前
|
XML Java 数据格式
Spring容器Bean之XML配置方式
通过对以上内容的掌握,开发人员可以灵活地使用Spring的XML配置方式来管理应用程序的Bean,提高代码的模块化和可维护性。
122 6
|
5月前
|
XML Java 数据格式
🌱 深入Spring的心脏:Bean配置的艺术与实践 🌟
本文深入探讨了Spring框架中Bean配置的奥秘,从基本概念到XML配置文件的使用,再到静态工厂方式实例化Bean的详细步骤,通过实际代码示例帮助读者更好地理解和应用Spring的Bean配置。希望对你的Spring开发之旅有所助益。
329 4
|
5月前
|
安全 Java 开发者
Spring容器中的bean是线程安全的吗?
Spring容器中的bean默认为单例模式,多线程环境下若操作共享成员变量,易引发线程安全问题。Spring未对单例bean做线程安全处理,需开发者自行解决。通常,Spring bean(如Controller、Service、Dao)无状态变化,故多为线程安全。若涉及线程安全问题,可通过编码或设置bean作用域为prototype解决。
87 1
|
4月前
|
监控 运维
HTTPS 证书自动化运维:https证书管理系统- 自动化监控
本文介绍如何设置和查看域名或证书监控。步骤1:根据证书状态选择新增域名或证书监控,线上部署推荐域名监控,未部署选择证书监控。步骤2:查询监控记录详情。步骤3:在详情页查看每日定时检测结果或手动测试。
HTTPS 证书自动化运维:https证书管理系统- 自动化监控