SpringBoot——如何获取配置文件中的配置信息

news2024/11/26 20:39:32

SpringBoot——如何获取配置文件中的配置信息

简单介绍:

之前我们看到了我们是如何对SpringBoot以及SpringBoot中不同技术进行配置的,我们舍弃了之前在Spring中的对不同的技术使用不同的配置信息的方式,使用将所有技术的配置写在了一个配置文件中,那么我们要如何获取这些配置信息呢?也就是这些对应的技术是如何获取配置信息中的值的呢?

简单演示:

首先我们要自己写一段配置,这个配置纯碎是我们自己写的,并不会被任何的技术读取:
在这里插入图片描述
然后我们将要写一个程序,读取最后这部分我们自己写的配置信息:
其实这并不是一个新鲜的操作,在之前我们学习Spring的时候,还记得之前我们为了解决数据层的硬编码问题 ,我们就曾经将与数据库连接有关的信息放在了一个配置文件中,然后在MybatisConfig的dataSource类中进行应用,那么当时我们是如何做的呢?
第一步:使用@PropertySource注解将我们需要读取配置的配置文件引入到类中来。
第二步:使用@Value进行注入,只不过注入的值是从配置文件中读取的,所以格式需要使用${配置文件中的属性名}的方式进行读取。
完整的写法是这样的:
在这里插入图片描述

看一下运行结果:

在这里插入图片描述
这就是一个最基础的读取配置文件的方法,也是之前我们在做的时候的一种普遍做法,那么SpringBoot内部也是这么做的吗?很遗憾并不是的,这么一条一条的写,那得写到什么时候,SpringBoot使用了另一种方法,他将所有的相关的属性配置成了一个对象,注意,是在配置文件中就组成了一个对象,然后在需要用到的地方,只读取这一组需要用到的配置信息对象,这样不就又快又安全,那么要如何将配置信息组成对象,又如何只读取这一个配置对象呢?
我们需要介绍一个新的配置文件类型,叫做yml配置文件:

YAML配置文件:

简单介绍:

yaml或称yml配置文件,全称Aint Markup Language,一种数据序列化语言。它的优点就是方便阅读,容易与脚本进行交互,以数据为核心,重数据轻形式。这种文件的扩展名是yml或者是yaml,一般yml用的多。
我们将之前写的properties形式的配置文件修改成yml格式的配置文件就知道这种文件的优势是什么了:
在这里插入图片描述
可以看到,这种配置文件和之前的配置文件的格式还是有很多的变化的,比如这种文件格式没有等号,多层参数使用缩进而不是点连接,其实还有很多的要求,我们整体的总结一下:
1、大小写敏感,spring和Spring会被认为是两个单词
2、属性层级关系使用多层描述,每行结尾使用冒号结束
3、使用缩进表示层级关系,同层级左侧对齐,只允许使用空格(不允许使用Tab)
4、属性值前面添加空格(属性值与属性名之间使用冒号+空格作为分隔)
5、#号表示注解
6、描述数组的时候,使用减号区分多个元素,每个元素列一行
这些其实都是比较正式的规则,具体要如何的写以及要如何的使用我们在后续的学习中都会给大家介绍到的。
那么继续之前我们说的,我们要在配置文件中配置一组由配置信息组成的对象,那么什么叫对象呢?
在这里插入图片描述
所谓的对象其实就是除了最后一层属性名之外的其他属性名其实都算是对象,我们都可以注入进一个配置文件中,那么我们就来看看如何进行注入:
在观察学习的时候可以结合之前获取properties配置文件的步骤和方式进行对照记忆。
1、首先要创建一个封装数据的类:
在这里插入图片描述
对于用来封装配置数据的类,我们首先要定义属性与配置信息中的属性互相对应:
在这里插入图片描述
其次,因为我们自动装载配置信息这个动作是由SpringBoot帮我们完成的,所以我们要将封装配置信息的类也注册进Spring容器中,所以要在类中加入一个@Component注解。
在这里插入图片描述
其次,将信息输入到属性中的这个动作是通过类中的Get和Set方法去完成的,所以我们需要将属性对应的方法添加上去,这里可以使用重新方法的方式,也可以使用Lombok的快速开发的方式,使用@Data注解的方式快速添加方法上去。
在这里插入图片描述
最后还有一个注解,这个注解的作用是将我们要注入的配置文件中的对象的名字填入进去,这样她才能知道他注入的是那一组数据,这也很符合他查找数据的方式,所以这个地方在配置文件中写的对象的名字是不能重复的:
在这里插入图片描述

这样我们一个比较完整的配置文件封装类就做完了,那么如何使用它呢?
在这里插入图片描述
这里我们打开测试类,这个测试类的位置就在test文件夹下他给我们提供的一个类就可以,他连方法都帮我们写好了,我们就做一个简单的测试,我们创建这个类,然后在项目启动的时候,Spring会帮我们自动检测这个类做了配置项的注入,然后会帮我们自动把配置文件中的信息注入到配置类中,然后我们使用自动注入的方式将配置类获取到,然后直接输出内容即可,这就是我们在测试中做的事情。
也就是说我们所有的配置注入的方式都已经在启动项目的时候就已经做好了,我们可以很方便的使用:
在这里插入图片描述
在运行程序之后,可以看到我们的对象中的值跟我们在配置文件中写入的值是一样的,那么就说明我们的Java类读取配置文件中的部分信息就已经完成了了,这种方法是我们在以后的项目中使用最多的配置信息。
并且这种方法也是让SpringBoot中的多个技术使用同一个配置文件的方法,在我们加载多项技术的时候,让不同的技术加载各自需要的配置就可以了,如果我们不做配置,SpringBoot也有对应的默认的配置让我们可以开箱即用,也是非常方便的。
并且如果配置文件中没有对应类中的属性的时候,类中的属性会自动填充空值null:
在这里插入图片描述
然后我们看运行结果:
在这里插入图片描述
可以看到,在对应的属性中,他会自动填充null。
如果是配置文件中多出了配置属性,在Java类中不存在,那么这个配置信息不会被自动填充:
在这里插入图片描述
我们来看运行结果:
在这里插入图片描述
Java类只会接收类中的属性值有的属性,对于多余的属性他会默认无视掉。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Mac(苹果)安装nvm进行node版本控制

Mac(苹果)安装nvm进行node版本控制 错误演示nvm安装下载命令更改网络环境配置环境 相信我一般的初学者问题看这一片就够了 错误演示 如上图所示,node的版本,与当前项目中的一些框架或者组件不支持时一般就会报这个错,…

一天吃透SpringCloud面试八股文

1、什么是Spring Cloud ? Spring cloud 流应用程序启动器是基于 Spring Boot 的 Spring 集成应用程序,提供与外部系统的集成。Spring cloud Task,一个生命周期短暂的微服务框架,用于快速构建执行有限数据处理的应用程序。 Sprin…

Portraiture4.1.0最新版PS/LR磨皮美白滤镜插件

Portraiture这款插件磨皮效率超高 是99%摄影师的必备插件 一秒磨皮,无卡顿,效果好 最新版Portraiture 2023磨皮效果提升很大 之前发布了Portraitrue4.0.3版 现已更新!本期带来最新版: 磨皮插件Portraiture 4.1.0版!portraiture最新版本…

LITCTF2023 部分WP

WEB 我Flag呢? 查看源码就有flag了 彩蛋 导弹迷踪 Follow me and hack me 然后彩蛋www.zip解压即可 PHP是世界上最好的语言!! 直接可以命令执行,当时想了好久 Vim yyds 扫目录,有swp文件 作业管理系统 任意文件上传,传个马访问就…

十二、目标检测

文章目录 1、 目标定位2、特征点检测3、卷积网络的滑动窗口4、交并比(Intersection over Union)5、非最大值抑制(Non Max Suppression)6、anchor boxTHE END 1、 目标定位 \qquad 目标检测是图像识别中的更加复杂的应用情景,图像识别只需要输出某一幅图像的种类即可…

React面试题汇总1

1.React的严格模式如何使用&#xff0c;有什么用处&#xff1f; React中StrictMode严格模式_react.strictmode_前端精髓的博客-CSDN博客当我们使用 npx create-react-app my-app 创建一个项目的时候。项目中有一段如下所示的代码&#xff1a;ReactDOM.render( <React.Stric…

LeetCode_Day2 | 有意思的数组滑动窗口及螺旋矩阵

LeetCode_数组 977.有序数组的平方1.题目描述2.暴力法3. 双指针法 209.长度最小的子数组1.题目描述2.暴力法3.滑动窗口(双指针法) 59.螺旋矩阵1.题目描述2. 螺旋矩阵解法 977.有序数组的平方 1.题目描述 给你一个按 非递减顺序 排序的整数数组 nums&#xff0c;返回 每个数字…

解决IDEA中集成Tomcat日志出现的乱码问题

解决IDEA中集成Tomcat日志出现的乱码问题 下面的方式可以解决的是解决的是idea中出现的控制台&#xff0c;Localhost日志以及Catalina日志乱码的问题 1.出现的乱码问题 你是不是也是遇到了这种的乱码的情况呢&#xff1f; 2.解决方法 1.打开conf文件夹。 2.设置输出的日志的编…

【小沐学Python】Python实现在线英语翻译功能

文章目录 1、简介2、在线翻译接口2.1 Google Translate API2.2 Microsoft Translator API2.2.1 开发简介2.2.2 开发费用2.2.3 开发API 2.3 百度翻译开放平台 API2.3.1 开发简介2.3.2 开发费用2.3.3 开发API 2.4 Tencent AI 开放平台的翻译 API2.4.1 开发简介2.4.2 开发API 2.5 …

人工智能基础部分16-神经网络与GPU加速训练

大家好&#xff0c;我是微学AI&#xff0c;今天给大家介绍一下人工智能基础部分15-神经网络与GPU加速训练&#xff0c;在深度学习领域&#xff0c;神经网络已经成为了一种流行的、表现优秀的技术。然而&#xff0c;随着神经网络的规模越来越大&#xff0c;训练神经网络所需的时…

Kafka Connect JNDI注入漏洞复现(CVE-2023-25194)

漏洞原理 Apache Kafka Connect中存在JNDI注入漏洞&#xff0c;当攻击者可访问Kafka Connect Worker&#xff0c;且可以创建或修改连接器时&#xff0c;通过设置sasl.jaas.config属性为com.sun.security.auth.module.JndiLoginModule&#xff0c;进而可导致JNDI注入&#xff0c…

数字设计小思 - 谈谈非理想时钟的时钟偏差

写在前面 本系列整理数字系统设计的相关知识体系架构&#xff0c;为了方便后续自己查阅与求职准备。在FPGA和ASIC设计中&#xff0c;时钟信号的好坏很大程度上影响了整个系统的稳定性&#xff0c;本文主要介绍了数字设计中的非理想时钟的偏差来源与影响。 &#xff08;本文长…

数据结构-排序-(直接插入、折半插入、希尔排序、冒泡、快速排序)

目录 一、直接插入排序 二、折半插入排序 三、希尔排序 四、冒泡排序 五、快速排序 *效率分析 一、直接插入排序 思想&#xff1a;每次将一个待排序的记录按其关键字大小插入到前面已经排好序中&#xff0c;直到全部记录插入完毕 保证稳定性 空间复杂度&#xff1a;O(1…

SpringBoot 基本介绍--依赖管理和自动配置--容器功能

目录 SpringBoot 基本介绍 官方文档 Spring Boot 是什么? SpringBoot 快速入门 需求/图解说明 完成步骤 创建MainApp.java SpringBoot 应用主程序 创建HelloController.java 控制器 运行MainApp.java 完成测试 快速入门小结 Spring SpringMVC SpringBoot 的关系 梳…

【论文阅读】RapSheet:端点检测和响应系统的战术来源分析(SP-2020)

Tactical Provenance Analysis for Endpoint Detection and Response Systems S&P-2022 伊利诺伊大学香槟分校 Hassan W U, Bates A, Marino D. Tactical provenance analysis for endpoint detection and response systems[C]//2020 IEEE Symposium on Security and Priva…

【YOLO系列】--YOLOv5网络结构超详细解读/总结

前言 官方源码仓库&#xff1a;GitHub - ultralytics/yolov5: YOLOv5 &#x1f680; in PyTorch > ONNX > CoreML > TFLite YOLOv5至今没有论文发表出来&#xff0c;YOLOv5项目的作者是Glenn Jocher并不是原作者Joseph Redmon。作者当时也有说准备在2021年的12月1号之…

linux pl320 mbox控制器驱动分析 - (1) pl320手册分析

linux pl320 mbox控制器驱动分析 1 pl320简介1.1 pl320用途1.2 pl320 IPCM 由以下部分组成&#xff1a;1.3 pl320 IPCM可配置的参数1.4 功能操作1.5 IPCM 操作流程1.6 Channel ID 2 Using mailboxes&#xff08;使用邮箱中断&#xff09;2.1 Defining source core2.2 Defining …

JNI中GetObjectArrayElement, GetStringUTFChars,ReleaseStringUTFChars函数讲解

文章目录 GetObjectArrayElement函数使用场景代码演示GetStringUTFChars 函数使用场景ReleaseStringUTFChars函数 GetObjectArrayElement函数 函数原型&#xff1a; jobject GetObjectArrayElement(JNIEnv *env, jobjectArray array, jsize index); Returns an element of a J…

STL容器之deque

文章目录 deque容器简介deque的操作 deque容器简介 deque是“double-ended queue”的缩写&#xff0c;和vector一样都是STL的容器 deque是双端数组&#xff0c;而vector是单端的deque在接口上和vector非常相似&#xff0c;在许多操作的地方都可以直接替换deque可以随机存取元…

C语言-【操作符二】

Hello&#xff0c;大家好&#xff0c;前面的文章里边介绍了算术、赋值以及移位操作符&#xff0c;这篇文章呢&#xff0c;就介绍一下C语言中的其他操作符吧&#xff5e; 目录 位操作符 单目操作符 关系操作符 逻辑操作符 条件操作符 逗号表达式 下标引用&#xff0c;函…