SpringBoot 的配置

news2024/12/27 10:49:37

目录

配置文件到底有什么作用呢 ?

SpringBoot的配置文件的格式有哪些呢?

properties配置文件

yml配置文件

properties乱码问题

多平台的配置文件设置


配置文件到底有什么作用呢 ?

配置文件主要是配置项目的一些重要的数据..

  • 比如配置数据库的连接信息

数据库是非常重要的一环,可以进行持久化存储,所以在做项目的时候使用数据库那是必须的.以前JDBC是直接写代码写用户名,密码.... 现在到了框架只需要配置即可.

  • 项目的启动端口

就比如一个教务管理系统它是分为学生端和老师端的,每一个的界面都是不一样的,就需要进行配置

  • 再比如 : 第三方的调用密钥等信息
  • 在比如 : 用于发现和定位问题的普通日志与异常日志...

配置文件都是对非常关键的数据进行配置的.所以是非常重要的.

SpringBoot的配置文件的格式有哪些呢?

SpringBoot配置文件的格式主要分为以下两种格式

  • 一种是properties
  • 一种是yml

我们先来看一看这两种配置文件的格式长啥样?

这里要注意一下,我们上一篇文章也讲过关于SpringBoot的核心设计思想,那就是约定大于配置.

什么意思呢?我们在来回忆一下

对于SpringBoot来说它不再像Spring那样需要配置繁琐的配置文件,SpringBoot它自己就会将配置文件配置好,不需要你自己去配置了.这就提高了效率.也就是当你在使用SpringBoot开发程序的时候使用它框架的默认配置就可以,如果你的需求与它默认的配置不符,那你就需要进行重写或者修改一些配置完成你的需求就行.

意思就是SpringBoot都会给你配置好,你只需要按照它的规定/约定去使用,不违反这个约定就可以使用SpringBoot进行高效的进行开发 这就是SpringBoot 的核心设计思想 : "约定大于配置"

我们一般会有这些约定 :

比如 :

  • 我们的Maven的目录结构,默认有resource文件夹来存放资源配置文件.我们默认生成的类都在target文件夹下
  • SpringBoot的配置文件必须是 application.的命名形式并且唯一. 比如application.properties /application.yml
  • 我们的启动类和我们自己写的带注解的类必须在同一级目录/同一级的子目录下
  • application.yml中默认属性。数据库连接信息必须是以spring: datasource: 为前缀;多环境配置。该属性可以根据运行环境自动读取不同的配置文件;端口号、请求路径等
  • Spring Boot会自动内置Tomcat容器来运行 Web 应用,我们不需要再去单独做应用部署。

对于我们SpringBoot的这个配置文件 必须是 application.的命名形式 比如application.properties 或者是application.yml,

这是SpringBoot的约定,我们不能违反否则的话,我们的配置文件就会不生效

既然有两种配置文件,都同时配置了,最终按照哪种配置文件进行配置呢?

我分别给两种配置文件都设置了不同的端口号,可以看出最终启动端口号为.properties配置文件设置的.

可以得出结论: 当两种配置文件都同时配置了同样的配置,.properties优先级高一些,但是不代表yml就不配置了.加载.properties文件之后,也会加载.yml配置文件.

虽然,存在两种格式的配置文件 yml和properties,但是在实际开发为了更好地维护,会统一使用一种格式的配置文件.

properties配置文件

对于properties配置文件我们先学习一下它的基本语法,然后再来学怎么配置/怎么存,然后在学习怎么取出来

properties配置文件的基本语法

基本语法也就是 key = value的形式

我们配置的内容其实又分为系统配置自定义的配置

配置系统的一些配置

比如我们来配置一个指定的端口号

比如我们要配置数据库的连接信息

 

用户自定义的配置项

 

如何读取配置文件呢?

SpringBoot给我们提供了一个@Value注解用来读取配置文件的.

语法格式 : @Value(${xxxx})

注意注意注意 : 我们不能写成@Value(xxxx) 这样,如果是这样的话它是会直接把xxx赋值给那个成员变量的.

如果写成@Value(${xxxx}) 这样正确的写法就是读取xxxx找到对应的key将Value返回给成员变量

比如我们读取系统配置项-->端口号port

 

 

我们再来读取一下用户自定义的配置项

 

properties配置文件的优缺点

优点 :

  • properties的配置文件写法简单. key对应着value key=value的形式

缺点 :

  • 会有很多的冗余代码,对于同样的前缀可能要写多次

比如我们配置数据库连接信息的时候

 

spring.datasource 有多个冗余的代码,前缀要写很多次

yml配置文件

YAML是一种人类可读的数据序列化语言,一般YAML通常用于配置文件,与属性文件相比,如果我们想要与配置文件中添加复杂的属性,YAML更加结构化,很少混淆,YAML分层配置数据.相比于properties配置的方式,YAML配置的方式更加直观清晰,简洁明了,有层次感.

YML配置文件的优点

  • ym配置文件,可读性高,写法简单,易于理解.
  • yml支持更多的数据类型,如 : 对象(键值对的集合),数组,纯量(字符串,布尔值,整数,浮点数,Null,时间日期....).
  • yml支持更多的编程语言(比如Java,Golang,PHP,Python.....等)

YMAL支持这么多语言有什么用??

有些人就会问,我YAML支持那么多编程语言有什么用,我就用Java.

当在大公司里面都是分项目小组的,彼此之间是相互独立的,这些组用到的数据库是一样的,但用户数据是互通的,由于用户太多就要使用微服务,也就意味着一个程序要部署到成千上万个机器上(一万个节点),就需要一万个配置,这时当运维做了调整和升级的时候,这些配置文件就都需要改变,这时候维护性就变得很高很高.

那让这些小组都读同一份配置-->配置文件格式相同, 也就是所有的配置文件都走一份在线的配置文件.这个时候由于我们YML是跨语言的,所有语言都可以读取一份YML,都调这一份(配置一份在线配置文件)就可以了,这样运维在做调整和升级,那份在线的配置就会同步更新,就能够读取到了

YML语法

  • 大小写敏感
  • 使用缩进表示层级关系(第一个层级前面不加空格,每一个层级的前面都比上面多加一个TAB键用于缩进表示层级关系,同一层级元素左对齐即可)
  • '#'表示注释
 

这种带有层次的结构可读性更高,写法简单,相比于.properties格式的配置文件省去了冗余的前缀.

我们可以比对一下

注意 :

YAML语法格式:

  • 使用缩进表示层级关系(第一个层级前面不加空格,每一个层级的前面都比上面多加一个TAB键用于缩进表示层级关系,同一层级元素左对齐即可)

每一个层级在进行配置的时候是 : key: val(key冒号空格val) 记住在配置的时候val前面一定要加空格.否则配置失败,也不会出现代码高亮.

YAML配置数据库

 

用户自定义配置项

 

YAML可以配置更多的数据类型,我们依次来演示一下

我们来检验一下进行读取

读取YAML配置还是使用@VALUE注解进行读取

 

还有一点需要注意的是

配置字符串的时候,可以啥也不加直接写中文,也可以加单引号,也可以加双引号

但是只有加双引号时候特殊符号才会起作用

YAML配置对象

配置People对象

读取方式一

读取People对象中的属性

对应层级关系我们可以利用 .(点) 来进行访问.

我们上面那种读取是将people一个一个属性读取的,我们有没有一种方式可以读取一个对象呢 ? 然后通过对象来访问这些属性.

读取方式二

 

要想读取people对象,那就先创建出一个people对象.

通过@ConfigurationProperties 注解来进行读取配置文件,将配置文件配置的属性赋值到当前people对象中.

注意还要加一个@Component注解,代表将这个对象存到Spring中--->在SpringBoot项目一启动时就会扫描启动类的同级目录下的类,包,子包,如果有Component注解就将其存到Spring中.

读取对象注意事项

  • 读取配置文件中的实体类时,一定要有setter方法,因为@ConfigurationProperties注解在实现的时候是通过setter将配置文件中的内容赋值给字段/属性的.

  • ConfigurationProperties需要和注册注解Component(放入到Spring中)进行一起使用,否则就不能将其存放到Spring中,也不能依赖注入了

行内写法

 

@ConfigurationProperties

@ConfigurationProperties 是一种读取配置文件的一种方式,通过指定配置的前缀(配置的标识),来读取配置文件中的内容.

@ConfigurationProperties 和 @Value 的使用略微不同,@Value 是读取单个配置项的,而 @ConfigurationProperties 是读取一组配置项的,我们可以使用 @ConfigurationProperties 加实体类读取一组配置项,其中 prefix 表示读取一组配置项的name,相当于 Java 中的类名,最后再把此配置类,注入到某一个类中就可以使用了

YAML配置集合

比如 在一个项目中可能使用多种数据库,这时候多个数据库就相当于一个集合,我就就可以自定义配置,来配置集合.

我们接下来来演示一下 : 

 

集合中每一个元素 利用 - (杠 + 空格)

项目支持很多种类型的数据库

集合名字

集合属性名--->接收多个值

- 值

- 值

如何读取集合呢 ?

还是利用ConfigurationProperties(prefix = "") 来进行读取

还是要加一个Component注解

 

我们可以写setter和getter也可以直接加一个注解

那这个setter和getter注解其实在我们.class文件编译的时候还是使用的是加上setter方法和getter方法

在讲解日志lombok的时候再来讲解原理

properties乱码问题

在你没有处理这个问题之前,每当你重新打开一个properties这个配置文件,你就会发现你的注释全变成了乱码.

原因就是配置文件的默认编码格式不是UTF-8

所以我们就要把当前项目和新项目的编码格式改成UTF-8就可以解决了

当前项目 :

新项目 :

多平台的配置文件设置

为什么会有多平台配置文件设置??

一般在公司都要分多种配置文件,因为有多种环境比如,开发环境,测试环境,生产环境... 每种环境需求并不一样,所以自然配置就不一样.就比如我开发环境就需要多的日志来帮程序猿排查问题,解决问题,而对于生产环境,也就是用户用的环境,不需要打印多的日志,这样会影响速度.

总之,分多平台的配置文件设置就是为了更好地维护每种环境所要应对的事情.

如果不设置多平台的配置文件,就用那一份主的配置文件,那么每种环境配置的都不一样,每次运行的时候都要修改.这就很麻烦了.

好接下来我们按照这三种常见的环境进行配置

-- 开发环境的配置文件

-- 测试环境的配置文件

-- 生产环境的配置文件

一般文件格式都是以 application 或 application-xxx... .yml

一定是按照这种格式的,因为springboot ->有一个特点 就是 "约定大于配置"

我们需要在主yml配置文件设置使用哪种环境为运行环境

 

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

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

相关文章

虚拟机中如何安装Liunx环境

安装步骤 首先 准备一个Linux系统镜像 这是下载地址:https://cn.ubuntu.com/download/server/step1 然后打开虚拟机软件,点击新建 配置虚拟机名称 配置内存【建议4GB,内存小就少弄一顿】【再点击下一步】 硬盘配置 点击下一步 到这一步&am…

MVP、原型、概念验证,傻傻分不清楚?

MVP、原型以及概念验证这三者的概念虽然没有密切的联系,但也有不少人会分不清这三者的区别,在这篇文章中,我们会帮大家区分一下这三个概念。 首先是MVP,MVP是Minimum Viable Product的缩写,即最小可行性产品。MVP通过…

计算机网络---DHCP和自动配置

什么是DHCP HCP(动态主机配置协议)是一个局域网的网络协议,客户机 / 服务器协议。指的是由服务器控制一段IP地址范围,客户机登录服务器时就可以自动获得服务器分配的IP地址和子网掩码。默认情况下,DHCP作为Windows Se…

在SPDK中体验一下E810网卡ADQ直通车

早在2019年,Intel发布第二代Xeon Scalable系列处理器的同时,也推出了E800系列网卡。该网卡的亮点除了支持100Gb,便是新增了ADQ功能。1. 了解ADQADQ 全称Application Device Queues,是一种队列和控制技术,可提高应用程序…

44. 含并行连结的网络(GoogLeNet)

GoogLeNet吸收了NiN中串联网络的思想,并在此基础上做了改进。 这篇论文的一个重点是解决了什么样大小的卷积核最合适的问题。 毕竟,以前流行的网络使用小到1 * 1,大到11 * 11的卷积核。 本文的一个观点是,有时使用不同大小的卷积…

unreal engine 增强输入的使用分析

由于ue5以前的输入 系统已经提示被弃用了,因此建议使用新版本 首先 分别新建输入操作 新建映射情景 image.png打开新建的输入操作 根据下图可以得出结论,此东西用于描述 是何种类型映射,以及是否消耗事件 不传递 image.pngimage.png打开情景上…

用Python绘制一朵玫瑰花,送给特别的她

前言 哈喽哈喽,跨年倒计时三天九小时 上次发了烟花的文章,看来还是蛮多人需要代码的 今天就来搞一朵唯一的花吧~(送给你喜欢的那个她) 效果 话不多说 咱先直接看看效果,毕竟搞的不好看我也拿不出手 提前先说 我尽…

CANopen3.0-数据格式

一、CAN消息 一帧CAN消息的通信协议如下: 其中, id: CAN消息的标识符,通常是11bits rtr: 0–消息帧,普通消息;1–远程帧,远程传输请求消息,这种类型的消息不能包含数据帧; dn: 数据帧,一帧普通CAN消息包括0~8bytes数据 在CANOpen中需要自己实现CAN发送消息接口,类似…

小型水库水雨情监测预警自动测报平台 辅助水利在线监测水库水位+雨量

平升电子小型水库水雨情监测预警自动测报平台辅助水利管理部门实现水库雨水情信息“全要素、全量程、全覆盖”自动测报。系统具备水库水位、雨量、现场图像/视频等水文信息采集、传输、处理及预警广播等功能,有效提升了雨水情信息的时效性和准确度,为保障…

网络常见配置及Nmcli配置使用

1.查看网络配置 /etc/services 可以查看协议的tcp/udp端口 IP common ip addr show #查看设备或IP信息也可以通过ifconfig查询。 ip -s link show eno16777734 #可以发送或接收包的状态ip route #查看路由信息ping 测试通讯连接,用ctrlc结束 Meth : ping [opting]…

中间件:SpringBoot-JAVA整合MQTT通信

1、环境Win10; 2、JDK 1.8; 3、SpringBoot 2.7.5; 4、MQTTV3 1.2.5 5、EMQX服务器本地安装使用参考:MQTT学习记录(一、Windows)_我也不清楚的博客-CSDN博客_mqtt默认密码 6、MQTTX 官方客户端可视化工具安装参考&#…

Ae:段落面板

◆ ◆ ◆段落面板Ae菜单:窗口/段落Window/Paragraph快捷键:Ctrl 7对于点文本,默认一行为一个段落。每按一次回车键,就多出一个段落。对于段落文本,一段可能有多行,具体取决于定界框的尺寸。末尾有回车符…

路由基础:

1、路由中包含以下信息: 目的网络 掩码 出接口 下一跳 对路由条目的管理实际上就是路由器管理、维护路由信息的具体实现,路由表中只会保存“最优”路由。 2、路由获取方式: 直连 静态 动态 * 直连&a…

RHCSA 第四天笔记

文本内容在命令行的操作 文本过滤:grep 文本三剑客: gerp sed awk grep 选项 关键的字符串 文件 grep root /etc/passwd 查找root(交集查找) ^ 以……为开头 $ 以……为结尾 Grep ^root /etc/passwd …

MATLAB | MATLAB不会画图?官方团队来教你

让我看看是哪个小傻瓜还没用过MATLAB官方gallery,常见的图直接MATHWORKS搜索一下就能找到,一些有意思的组合图,以及一些特殊属性的设置MATHWORKS官方是有专门去整理的,虽然一些很特殊的图还是没有(哈哈哈弦图小提琴图啥的官方没有…

第004课 - 项目微服务架构图

文章目录 项目架构图项目架构图 外网部署就是面向公众访问的,部署前端项目。 可以有手机app,也可以有web网站。 内网部署后端系统。 客户端发送请求,请求是先来到我们的nginx集群。 nginx将请求转交给我们的后台服务。 nginx是先将请求转交给api网关。 api网关我们使用…

论文浅尝 | 通过依赖掩码语法引导预训练提升关系抽取

笔记整理:王大壮链接: https://aclanthology.org/2022.findings-acl.147v1.pdf动机关系抽取是一项重要的自然语言处理任务,旨在预测给定文本中两个给定实体之间的关系。其中,对文本上下文信息的良好理解对于实现出色的模型性能至关重要。在不…

CMMI之项目规划

项目规划(Project Planning)的目的是为项目的研发和管理工作制定合理的行动纲领(即《项目计划》),以便所有相关人员按照该计划有条不紊地开展工作。 为了避免词义混淆,这里把动词Planning译为规划&#xf…

用 Python 写一个经典飞机大战

当年微信 5.0 发布时,首页被设置成了一款新推出的小游戏,它就是微信版飞机大战,游戏一经推出便是火爆异常,铅笔画风格的游戏界面也受到了很多人的喜欢。 最近重温了一下这款小游戏,尽管时隔多年,但无论是游…

双向循环神经网络(隐马尔可夫模型)

在双向循环神经网络中,每个时间步的隐状态由当前时间步的前后数据同时决定。 双向循环神经网络与概率图模型中的“前向-后向”算法具有相似性。 双向循环神经网络主要用于序列编码和给定双向上下文的观测估计。 由于梯度链更长,因此双向循环神经网络的…