浅谈SpringBoot配置文件

文章目录

  • 一、配置文件作用
  • 二、配置文件分类
  • 三、SpringBoot内置的配置文件格式
    • 3.1、.properties
      • 3.1.1、.properties配置语法
      • 3.1.2、.properties读取方式
    • 3.2、.yml/.yaml
      • 3.2.1、.yml配置语法
      • 3.2.2、.yml读取形式
  • 四、两种配置文件优缺点
    • 4.1、.properties
    • 4.2、.yml
      • 4.2.1、.yml支持更多数据类型
  • 五、.properties vs .yml/.yaml
  • 六、设置不同环境的配置文件[!]

一、配置文件作用

一个项目中最重要的信息都是在配置文件中配置的,譬如:
1、数据库的连接信息(包含用户名和密码的设置)
2、项目的启动端口
     SpringBoot默认的运行端口是8080,当进行微服务开发时,一般都是一个主机部署多份程序或者多个主机部署多份程序。此时会希望一个项目中彼此独立的多个模块在当前电脑上都启动起来,由于每一个应用只能跑一个端口号,所有此时这些彼此独立的模块就需要设置不同端口
3、第三方系统的调用秘钥等信息。
     譬如说:大学生在学校学习线上选修课的时候,一般都是使用智慧树/学习通APP进行学习,智慧树APP会记录学生选修课的学习进度以及考试通过情况,期末时,学校的教务系统就会从智慧树中获取到学生选修课的通过率。
     那么教务系统是如何从第三方智慧树APP调用接口获取到隶属自己学校学生的选修课通过情况?其实就是学校教务系统使用智慧树APP提供的秘钥,拿到对智慧树的访问权限,获取智慧树给学校教务系统提供的查询自己本校学生选修课通过情况的接口。这样就可以防止学生信息泄露,保证学生个人信息安全。
     教务系统可能会有多个地方需要使用秘钥进行访问智慧树APP,因此在项目中访问一个全局变量,一般有两种方式:1、放在全局类里2、放在配置文件中。
     把秘钥放在一个全局类里,系统就可以调用了,但是这样会导致项目打包后,秘钥无法再修改(因为测试时和线上使用的秘钥是不同的,项目打包进行线上部署时,运维需要把程序员编写程序时使用的调试秘钥改成线上生产环境的秘钥),并且部署项目时要将项目打包,打包后jar包里的所有.java代码都变成了字节码文件,无法修改。
     将秘钥放在配置文件里,配置文件是存在目录里,解压缩打包后的jar包,打开目录,此时还是能对配置文件进行修改,修改完的配置文件再放回压缩包就行了,不会对已打包的jar包有任何影响,方便进行项目部署。
4、用于设置发现和定位问题的普通日志和异常日志、日志的等级设置等。

二、配置文件分类

1、系统使用的配置文件(系统配置文件),如:端口号的配置、连接数据库的配置。如果想要了解更多系统配置文件里的配置项,打开官方文档链接即可。
2、用户自定义配置文件
譬如说:有些学校的教务系统不需要去访问第三方智慧树APP来获取学生线上选修课的通过率,他们自己使用自己学校内部开发的APP,那么此时这些学校就不需要在配置文件里配置第三方智慧树APP的秘钥了。因此这个第三方秘钥也可以说是一种用户自定义的配置文件。

特殊说明:
对于一个 SpringBoot 项目中,可以有两种格式的配置文件(但项目中通常只会使用一种格式的配置文件),当项目中同时含有两种配置文件时,两种配置文件中都存在了相同配置项(就像一个项目含有两种格式配置文件,两个配置文件设置了端口号时设置了不同的端口号),此时优先以 .properties 配置文件中的内容为准。

如果项目中含有多个格式、多个配置文件,希望指定读取某个配置文件,就可以使用注解 @PropertySource(value = “配置文件名”,encoding = “utf-8”),但是有可能你设置的 utf-8也没办法解决.properties的遗留问题:中文乱码,因为注解设置了utf-8,还需要需要配置文件的页面右下角含有 utf-8,这两个配合到一块,才能解决该问题。

三、SpringBoot内置的配置文件格式

SpringBoot内置的配置文件格式有以下两种,需要学会设置这两种配置文件并读取

3.1、.properties

3.1.1、.properties配置语法

.properties 以键值的形式配置,key 和 value 之间以 = 连接:即 key=value
在这里插入图片描述

3.1.2、.properties读取方式

在这里插入图片描述
此时我们自定义的配置信息:myvalue=20,在代码中应该如何读取??使用注解 @Value($“配置项的键”) 即可读取。
在这里插入图片描述
在这里插入图片描述
正确写法读取配置项的值:
读取成功:
在这里插入图片描述
如果配置项内容写的是中文,有可能显示的是乱码,乱码无非两个原因:1、读取到的时候,数据就是乱码的 2、返回数据的时候导致了乱码。目前没办法明确乱码原因,可以通过在 return 语句初打断点,进行调试,明确问题。
在这里插入图片描述
代码中类加了@Controller 注解,此时类会随着Spring的启动而启动,类启动就会执行构造方法,此时可以将一些代码放在构造方法中执行。 属性的初始化是在构造方法之前。
在这里插入图片描述

3.2、.yml/.yaml

3.2.1、.yml配置语法

key: value , value和 :之间,必须有一个空格,语法才会生效,否则报错!
在这里插入图片描述

3.2.2、.yml读取形式

跟.properties 一样。

四、两种配置文件优缺点

4.1、.properties

1、配置信息含有中文时容易出现乱码问题
2、信息冗余
在这里插入图片描述

4.2、.yml

1、语法和 JSON 语言类似,写法简单,易于理解
2、同时.yml支持更多数据类型,适合用来编辑配置文件
3、 支持更多编程语言:如 Golang、PHP、Python、JavaScript…
4、不冗余
5、配置项含有中文信息时不会乱码
在这里插入图片描述

4.2.1、.yml支持更多数据类型

在这里插入图片描述
1、字符串
.yml中配置字符串 数据类型时:(.yml中配置字符串 “” 很危险,不会原样输出,含有特殊字符时执行特殊字符的含义,譬如 \n、\r、\f…)
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
2、.yml中配置对象[!]
写法1:(常见写法)在这里插入图片描述
写法2:行内写法

在这里插入图片描述
yml中对象的读取方式:
读取配置文件中的配置项:对象时,要借助一个实体类,该实体类中的字段名必须与配置项中的字段名一致。
新建实体类:(实体类必须含有注解@ConfigurationProperties(“配置项的key值”)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3、.yml中配置集合:
在这里插入图片描述

读取方式:跟读取对象一样,都需要新建实体类,实体类的类名是什么无所谓,但是字段名必须要对应上!

新建实体类:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

五、.properties vs .yml/.yaml

1、properties是以key=value的形式配置的键值类型的配置文件,而yml使用的是类似json格式的树形配置式进行配置的,yml 层级之间使用换行缩进的方式配置,key 和value之间使用“:”英文冒号加空格的方式设置,并且空格不可省略。
2、properties为早期并且默认的配置文件格式,但其配置存在- -定的冗余数据, 使用yml可以很好的解决数据冗余的问题。
3、yml通用性更好,支持更多语言,如Java. Go、 Python 等,如果是云服务器开发,可以使用一份配置文件作为Java和Go的共同配置文件。yml支持更多的数据类型。

六、设置不同环境的配置文件[!]

一个项目里,会有不同环境的配置信息,譬如说:开发环境,开发环境一般连接本地库;生产环境要求连接生产的库;测试环境要求连接测试的库…因此配置文件里的配置项信息是完全不同的。此时应该怎么办??
1、方法1:
在这里插入图片描述

2、方法2:(常用方法)
不同环境创建不同配置文件。

开发环境:创建一个命名为:application-dev.yml 的配置文件,其中 application- .yml 是固定格式,- 后面的命名随你自己定。

生产环境:创建一个命名为:application-prod.yml 的配置文件,其中 application- .yml 是固定格式,- 后面的命名随你自己定。

那么此时 对于application-dev.yml 、application-prod.yml 这样的配置文件来说,application.yml 、application.properties 是他们的主配置文件,可以在主配置文件中,设置不同环境下的配置文件。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

多门店小程序如何给各个门店进行结算

​有些商家业务扩张,会开设多个门店。其中有些门店是直营,有些门店是加盟。如果用一个小程序来涵盖所有门店的业务,那将有助于商家进行统一管理和建立品牌效应。但如何给各个门店进行资金结算,是一个重要的问题,本文将…

探索JavaScript函数---基础篇

目录 函数 声明和调用 声明(定义) 调用 参数 形参和实参 形参(Formal Arguments) 实参(Actual Arguments) 形参与实参的关系 返回值 作用域 全局作用域 局部作用域 匿名函数 函数表达式 立…

无限可能LangChain——开启大模型世界

什么是大语言模型? 大语言模型是一种人工智能模型,通常使用深度学习技术(如神经网络)来理解和生成人类语言。这些模型拥有非常多的参数,可以达到数十亿甚至更多,使得它们能够处理高度复杂的语言模式。 我…

【网络安全】Web安全基础 - 第二节:前置基础知识- HTTP协议,握手协议,Cookie及Session

本章节主要介绍一些基础知识 d(^_^o) HTTP协议 什么是HTTP 超文本传输协议(HyperText Transfer Protocol)是一种用于分布式、协作式和超媒体信息系统的应用层协议。 HTTP是一个基于请求与响应,无状态的,应用层协议,…

30 分钟内掌握 Mainnet、Testnet 和 Devnet。Devnet是什么??

在区块链技术领域,Mainnet、Testnet 和 Devnet 等术语经常被使用,但也经常被误解。 这三种环境在区块链应用的开发和部署中起着至关重要的作用,但它们的区别和目的却常常被混淆。 让我们踏上探索之旅,揭开 Mainnet、Testnet 和 De…

HTML5+CSS3回顾总结

一、HTML5新特性 1.语义化标签 <header> 头部标签<nav> 导航标签<article> 内容标签<section> 定义文档某个区域<aside> 侧边栏标签<footer> 尾部标签 2.多媒体标签 2.1视频标签vedio 》常规写法&#xff08;尽量都使用mp4&#xff0…

google的chromedriver最新版下载地址

Chrome for Testing availability (googlechromelabs.github.io) 复制对应的地址跳转进去即可下载&#xff0c;下载前先看下自己google浏览器版本&#xff0c;找到对应的版本号去下载&#xff0c;把解压缩的exe放到google浏览器目录下。

3D软件开发的相关技术

3D开发涉及到广泛的技术和工具&#xff0c;涵盖了多个领域&#xff0c;包括计算机图形学、编程、设计、物理模拟等。以下是3D开发中常用的技术和工具&#xff0c;掌握这些技术需要广泛的知识和实践&#xff0c;项目的成功依赖于对这些技术的有效整合和应用。北京木奇移动技术有…

写大型C工程makefile构建~

正文 最开始学习linux应用开发编写的时候&#xff0c;估计大部分伙伴们都是在一个目录里面编译整个工程&#xff0c;主要是linux通常没有非常合适的集成开发环境。 以前单目录的方式实在太过捡漏&#xff0c;在linux环境中进行C代码工程开发很多时候需要编写一个相对比较通用的…

海康 面阵相机命名规则

海康 面阵相机命名规则 https://www.v-club.com/vCollage/vCollageDetail/516?subjectIdRMse6nPiyo

Nginx(openresty) 开启gzip压缩功能 提高web网站传输速度

1 开启nginx gzip压缩后&#xff0c;网页的图片&#xff0c;css、js等静态资源的大小会减少&#xff0c;节约带宽&#xff0c;提高传输效率&#xff0c;给用户快的体验,给用户更好的体验. 2 安装 #centos 8.5 yum install gzip 3 配置 #建议统一配置在http段 vim /usr/loca…

汇舟问卷:兼职做国外问卷三小时挣200

在繁忙的都市生活中&#xff0c;许多人为了生计而日夜奔波。对于大多数人来说&#xff0c;白天的工作已经足够充实&#xff0c;但依然有很多人选择在下班时间&#xff0c;多做些什么&#xff0c;为自己带来一份额外​的收入。 目前下班做的兼职工作不是跑滴滴&#xff0c;就是…

发表《Science Advances》!量子近似优化算法实现再突破

内容来源&#xff1a;量子前哨&#xff08;ID&#xff1a;Qforepost&#xff09; 文丨慕一/娴睿 排版丨沛贤 深度好文&#xff1a;1500字丨6分钟阅读 摘要&#xff1a;摩根大通、美国能源部&#xff08;DOE&#xff09;阿贡国家实验室和 Quantinuum 的研究人员证明了量子近似…

NetApp财季报告亮点:全闪存阵列需求强劲,云计算收入增长放缓但AI领域前景乐观

在最新的财季报告中&#xff0c;NetApp的收入因全闪存阵列的强劲需求而显著增长。截至2024年4月26日的2024财年第四季度&#xff0c;NetApp的收入连续第三个季度上升&#xff0c;达到了16.7亿美元&#xff0c;较前一年同期增长6%&#xff0c;超出公司指导中值。净利润为2.91亿美…

MySQL-事务日志

事务的隔离性由 锁机制 实现 事务的原子性、一致性、隔离性 由事务的 redo日志 和 undo 日志来保证 redo log 称为 重做日志&#xff0c;提供再写入操作&#xff0c;恢复提交事务修改的页操作&#xff0c;用来保证事务的持久性。undo log 称为 回滚日志&#xff0c;回滚行记录…

揭秘c语言作用域

前言 欢迎来到我的博客 个人主页:北岭敲键盘的荒漠猫-CSDN博客 本文主要整理c语言中 与作用域相关的知识点 本文适合对象:无编程基础&#xff0c;因为解释的比较多&#xff0c;所以不适合有基础的人快速掌握了 作用域描述 其实就是起作用的区域。比如个变量&#xff0c;函数…

System-Verilog 实现DE2-115倒车雷达模拟

System-Verilog 实现DE2-115倒车雷达模拟 引言&#xff1a; 随着科技的不断进步&#xff0c;汽车安全技术也日益成为人们关注的焦点。在众多汽车安全辅助系统中&#xff0c;倒车雷达以其实用性和高效性脱颖而出&#xff0c;成为现代汽车不可或缺的一部分。倒车雷达系统利用超声…

轻松拿捏C语言——【内存函数】

&#x1f970;欢迎关注 轻松拿捏C语言系列&#xff0c;来和 小哇 一起进步&#xff01;✊ &#x1f389;创作不易&#xff0c;请多多支持&#x1f389; &#x1f308;感谢大家的阅读、点赞、收藏和关注&#x1f495; &#x1f339;如有问题&#xff0c;欢迎指正~~ 目录&#x1…

简单说说我对集成学习算法的一点理解

概要 集成学习&#xff08;Ensemble Learning&#xff09;是一种机器学习技术框架&#xff0c;它通过构建并结合多个学习器&#xff08;也称为个体学习器或基学习器&#xff09;来完成学习任务。 集成学习旨在通过组合多个基学习器的预测结果来提高整体模型的性能。每个基学习…

《mysql轻松学习·二》

1、创建数据表 contacts&#xff1a;数据表名 auto_increament&#xff1a;自动增长 primary key&#xff1a;主键 engineInnoDB default charsetutf8; 默认字符集utf8&#xff0c;不写就默认utf8 对数据表的操作&#xff1a; alter table 数据表名 add sex varchar(1); //添…