当前位置: 首页 > news >正文

【第八篇】 SpringBoot高级配置(配置篇)

简介

        本文介绍了SpringBoot中第三方Bean的使用方法、松散绑定的多种命名格式、常用计量单位的使用、Bean属性校验的实现、并指出YAML配置文件对进制数据的特殊处理方式。文中使用文字描述并配以图片,详细演示了SpringBoot的高级配置内容,以供大家参考。文章内容若存在错误或需改进的地方,欢迎大家指正!若对操作有任何疑问欢迎留言!非常感谢!

目录

一、第三方Bean的使用

1、将第三方类注册为SpringBoot项目中的Bean

(1)注册Bean

(2)测试

2、第三方Bean的属性绑定

(1)属性绑定

(2)测试

(3)答疑解惑

二、松散绑定

三、常用计量单位

1、时间属性

2、存储容量

四、Bean的属性校验

1、导入规范坐标

2、开启校验功能

3、具体校验类型

4、导入规范具体实现类

5、测试

6、扩展

五、关于属性绑定的一些问题

1、进制数据转换


一、第三方Bean的使用

1、将第三方类注册为SpringBoot项目中的Bean

        这里使用alibaba提供的数据库连接池DruidDataSource类作为示例

        首先需要将需要的第三方包的依赖坐标进行导入(这里并不是注册Bean的必要步骤,因演示需要才导入坐标)

(1)注册Bean

        创建一个类用于管理所有的第三方Bean,一般会创建一个config包,然后再config包下创建一个以Config结尾的配置类。该类名可以自定义,然后在该配置类上方声明@Configuration注解,声明为一个配置类,然后写一个方法,这个方法必须使用@Bean注解声明,该注解会将这个方法的返回注册为SpringBoot中的Bean,并且Bean的名称为首字母小写的方法名。

(2)测试

        可以知道在启动类这里能够得到IOC容器对象,那么只需要在这尝试获取一下DruidDataSource的Bean即可,若能获取并打印成功,代表方式正确。

2、第三方Bean的属性绑定

(1)属性绑定

        通过上面的操作已经将DruidDataSource类注册为了SpringBoot中的Bean,DruidDataSource当然也有自己的属性,那么DruidDataSource的属性值也是可以通过读取配置文件的内容来进行赋值的。

        下面以driverClass属性为例。

        首先在配置文件中配置出driverClass属性值

        然后在第三方类注册为Bean的方法上声明@ConfigurationProperties注解,并给prefix属性赋值为datasource,因为DruidDataSource中存在setDriverClassName方法,所以配置文件中的配置项就会通过setDriverClassName方法将配置项的值赋值给DruidDataSource的driverClass属性。

(2)测试

        还是在启动类中直接获取容器对象,然后获取Bean并进行打印属性值。

(3)答疑解惑

        也许会有为什么要给DruidDataSource的driverClass属性赋值,而配置项却写的是driver-class-name。

        首先中划线的问题是因为配置项的松散绑定,在下方的篇章会详细讲解,这里不再赘述。

        然后就是除去中划线,名称也和driverClass对不上,这里是因为配置项中的名称需要与实体类的set方法后的名称保持强一致。配置项名称时可以不与实体类中的属性名保持一致,因为一般情况下set/get方法后面的名称是和属性名一致的,比如自动生成或者使用lombok生成的方法,都是一致的,所以也会有配置项名必须属性名保持一致的说法。如果有特殊情况,那么只需要保证配置项中的名称需要与实体类的set方法后的名称强一致即可,与get方法、实体类名、实体属性名、set方法形参无关。详细可查看【第三篇 SpringBoot项目中的属性配置】。

二、松散绑定

        @ConfigurationProperties绑定的属性支持属性名松散绑定,@Value不支持。

        松散绑定也称宽松绑定,这种绑定机制更加的灵活,允许开发者以多种格式书写配置属性,而 Spring Boot 能够智能地将这些不同格式的属性名匹配到对应的 Bean 属性上。

        其实松散绑定也就是在配置文件中,只要名称对的上,那么名称的格式就可非常随意,可以按照不同的分格与实体属性进行绑定。

        下面以一个自定的类的ipAddress属性作为示例。

        第一种:与属性名完全保持一致

        第二种:小写格式

        第三种:下划线格式

        第N种:中划线、大写、大写中划线、胡乱写格式等等

        通过上面的演示可以知道什么是属性的松散绑定,官方推荐的格式为中划线格式,也就是ip-address格式,这种格式又称为“烤肉串格式”。最常用的格式还有驼峰格式(ipAddress)、常量格式(IP_ADDRESS)、下划线格式(ip_address)。

三、常用计量单位

1、时间属性

        JDK8提供了一个类为Duration,这个类专门用来描述时间属性的。所以在实体类中创建有关时间的属性时,就可以指定类型为Duration。

        当指定属性的类型为Duration后,默认的时间单位就是毫秒,从下面的例子可以看出。

        可以在Duration类型的属性上使用@DurationUnit注解声明,然后通过ChronoUnit枚举指定单位。

2、存储容量

        DataSize类专门用于表示数据的大小,所以在实体类中创建有关数据大小的属性时就可以指定类型为DataSize。

        当指定属性的类型为DataSize后,默认的数据大小单位就是B,从下面的例子可以看出。

        可以在DataSize类型的属性上使用@DataSizeUnit注解声明,然后通过DataUnit枚举指定单位。

四、Bean的属性校验

        开启数据校验有助于系统安全性,J2EE规范中JSR303规范定义了一组有关数据校验相关的API

1、导入规范坐标

        首先,导入JSR303规范坐标

2、开启校验功能

        然后,在指定地方开启bean属性校验功能,需要在指定类上声明@Validated注解,表示当前类需要做校验。

3、具体校验类型

        JSR303规范提供了多种注解用于校验,例如@Max用于校验最大值,value表示规范的值,message表示不符合这个规范的时候显示的提示信息。

4、导入规范具体实现类

        上面的操作只是JSR303规范的接口而具体使用还是需要导入具体实现类,这里使用的是hibernate

5、测试

        通过上面的配置就已经开启了Bean的属性校验,下面进行一项测试。

6、扩展

        点击@Max注解,然后进入到当前注解所在包javax.validation.constraints里,可以看到提供了很多用于校验的注解。

        同样hibernate也提供了非常多用于校验的注解。

五、关于属性绑定的一些问题

1、进制数据转换

        application.yaml配置文件是支持配置二进制、八进制、十进制、十六进制的数字配置的,配置文件会优先使用满足进制格式的配置来读取数字。

        例如,在配置密码的时候,设置为自己的生日0325,这个时候0325是符合八进制的规则的,那么application.yaml配置文件就会使用八进制读取数字,然后转换成十进制进行传递。

        解决办法:要么就直接使用十进制数字,获取对数字使用双引号包裹即可

上一篇——》【第七篇】 SpringBoot项目的热部署https://blog.csdn.net/qq1743177790/article/details/148498772

http://www.xdnf.cn/news/930817.html

相关文章:

  • CZGL.SystemInfo:跨平台的系统信息获取库
  • AUTOSAR实战教程--DoIP_01_配置项解释
  • 0x-3-Oracle 23 ai-sqlcl 25.1 集成安装-配置和优化
  • Linux下GCC和C++实现统计Clickhouse数据仓库指定表中各字段的空值、空字符串或零值比例
  • Go基本语法——go语言中的四种变量定义方法
  • 【Java学习笔记】BigInteger 和 BigDecimal 类
  • 【Go语言基础【19】】接口:灵活实现多态的核心机制
  • 基于RT-DETR算法的夜间交通车辆与行人目标检测
  • FPGA静态功耗
  • 2025年与2030年AI及AI智能体 (Agent) 市场份额分析报告
  • 网络之交换机
  • 【题解-洛谷】B3626 跳跃机器人
  • JavaWeb——登录(14/16):登录校验-Interceptor-详解(使用细节、拦截路径的配置、匹配规则、执行流程、拦截器与过滤器的区别)
  • 【华为云Astro 轻应用】组装“待处理工单”页面示例
  • C语言基础面试问答
  • 【人工智能 | 项目开发】Python Flask实现本地AI大模型可视化界面
  • 苍穹外卖-day01
  • 用 DeepSeek 高效完成数据分析与挖掘
  • Bootstrap Table开源的企业级数据表格集成
  • 大数据学习(133)-Hive数据分析2
  • 论文笔记:Large Language Models for Next Point-of-Interest Recommendation
  • 云原生监控体系建设:Prometheus+Grafana的企业级实践
  • 作为点的对象CenterNet论文阅读
  • 【论文阅读30】Bi-LSTM(2024)
  • Spring Boot + Flink + FlinkCDC 实现 MySQL 同步到 MySQL
  • 【Java学习笔记】Arrays类
  • 视频音频去掉开头结尾 视频去掉前n秒后n秒 电视剧去掉开头歌曲
  • 408第一季 - 数据结构 - 图
  • 数据结构排序
  • AU音频软件|Audition 2025网盘下载与安装教程指南