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

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

""引号 包裹

目录
相关文章
|
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的端口配置不会生效。
3137 17
Spring Boot 两种部署到服务器的方式
|
Java 数据库 微服务
微服务——SpringBoot使用归纳——Spring Boot中的项目属性配置——指定项目配置文件
在实际项目中,开发环境和生产环境的配置往往不同。为简化配置切换,可通过创建 `application-dev.yml` 和 `application-pro.yml` 分别管理开发与生产环境配置,如设置不同端口(8001/8002)。在 `application.yml` 中使用 `spring.profiles.active` 指定加载的配置文件,实现环境快速切换。本节还介绍了通过配置类读取参数的方法,适用于微服务场景,提升代码可维护性。课程源码可从 [Gitee](https://gitee.com/eson15/springboot_study) 下载。
641 0
|
SQL JSON Java
mybatis使用三:springboot整合mybatis,使用PageHelper 进行分页操作,并整合swagger2。使用正规的开发模式:定义统一的数据返回格式和请求模块
这篇文章介绍了如何在Spring Boot项目中整合MyBatis和PageHelper进行分页操作,并且集成Swagger2来生成API文档,同时定义了统一的数据返回格式和请求模块。
870 1
mybatis使用三:springboot整合mybatis,使用PageHelper 进行分页操作,并整合swagger2。使用正规的开发模式:定义统一的数据返回格式和请求模块
|
存储 运维 安全
Spring运维之boot项目多环境(yaml 多文件 proerties)及分组管理与开发控制
通过以上措施,可以保证Spring Boot项目的配置管理在专业水准上,并且易于维护和管理,符合搜索引擎收录标准。
1156 2
|
11月前
|
数据采集 机器学习/深度学习 人工智能
运维人的“福音”?AI 驱动的自动化网络监控到底香不香!
运维人的“福音”?AI 驱动的自动化网络监控到底香不香!
1215 0
|
6月前
|
人工智能 运维 监控
运维安全还能靠“人盯人”?别闹了,聊聊自动化处理的真功夫
运维安全还能靠“人盯人”?别闹了,聊聊自动化处理的真功夫
257 17
|
8月前
|
人工智能 运维 安全
运维老哥的救星?AI 驱动的自动化配置管理新趋势
运维老哥的救星?AI 驱动的自动化配置管理新趋势
408 11
|
10月前
|
机器学习/深度学习 人工智能 运维
运维不背锅,从“自动修锅”开始:AI自动化运维是怎么回事?
运维不背锅,从“自动修锅”开始:AI自动化运维是怎么回事?
588 49
|
9月前
|
运维 Prometheus 监控
系统崩了怪运维?别闹了,你该问问有没有自动化!
系统崩了怪运维?别闹了,你该问问有没有自动化!
260 9
|
9月前
|
运维 监控 应用服务中间件
运维打铁: Ruby 脚本在运维自动化中的应用探索
Ruby 是一种简洁、动态类型的编程语言,适合运维自动化任务。本文介绍了其在服务器配置管理、定时任务执行和日志分析处理中的应用,并提供了代码示例,展示了 Ruby 在运维自动化中的实际价值。
419 2

热门文章

最新文章