【Spring Boot】Spring Boot的系统配置 — 系统配置文件

news2024/11/26 19:55:05

系统配置文件

Spring Boot的系统配置文件,包括application.properties和application.yml配置文件的使用以及YML和Properties配置文件有什么区别,最后介绍如何更改Spring Boot的启动图案。

1.application.properties

Spring Boot支持两种不同格式的配置文件:一种是Properties,另一种是YML。Spring Boot默认使用application.properties作为系统配置文件,项目创建成功后会默认在resources目录下生成application.properties文件。该文件包含Spring Boot项目的全局配置。我们可以在application.properties文件中配置Spring Boot支持的所有配置项,比如端口号、数据库连接、日志、启动图案等。接下来将介绍在Spring Boot项目开发过程中与配置相关的一些知识。

(1)基本语法

Spring Boot项目创建成功后会默认resources目录下会自动创建application.properties文件。使用也非常简单,配置格式如下:

# 服务器端口配置
server.port=8081

在上面的示例中配置了应用的启动端口。如果不配置此项,则默认使用8080端口;如果需要使用其他端口,则通过server.port=8081修改系统启动端口。

此外,Properties文件中的配置项可以是无序的,但是为了保证配置文件清晰易读,建议把相关的配置项放在一起,比如:

在这里插入图片描述
以上示例将thymeleaf模板相关的配置放在一起,这样看起来清晰明了,从而便于快速找到thymeleaf的所有配置。

(2) 配置文件加载顺序

Spring Boot项目的配置文件默认存放在resources目录中。实际上,Spring Boot系统启动时会读取4个不同路径下的配置文件:

1)项目根目录下的config目录。

2)项目根目录。

3)classpath下的config目录。

4)classpath目录。

Spring Boot会从这4个位置全部加载主配置文件,这4个位置中的application.properties文件的优先级按照上面列出的顺序依次降低。如果同一个属性都出现在这4个文件中,则以优先级高的文件为准。

(3) 修改默认配置文件名

可能有人会问,项目的配置文件必须命名为application.properties吗?当然不是,我们可以通过修改项目启动类,调用SpringApplicationBuilder类的properties()方法来实现自定义配置文件名称。示例代码如下:

在这里插入图片描述

在上面的示例中,Spring Boot项目启动加载时默认读取更改名称的配置文件,即可修改默认加载的application.yml文件名。

2.application.yml

application.yml是以yml为后缀,使用YAML(YAML Ain’t a Markup Language)的配置文件。与XML等标记语言相比,YMAL结构更清晰易读,更适合用作属性配置文件。

(1)基本语法

YML基本语法为key:(空格)value的键值对形式,冒号后面必须加上空格。通过空格的缩进来控制属性的层级关系,只要是左对齐的一列数据,都是同一个层级的。具体格式如下:

在这里插入图片描述

在上面的示例中,自定义配置了系统的日志级别、文件路径等属性。可以看到logging下包含level和file两个子配置项。

YML文件虽然格式简洁直观,但是对格式要求较高,使用YML配置文件时需要注意以下几点:

1)属性值和冒号中间必须有空格,如name: Weiz正确,使用name:Weiz就会报错。
2)需要注意各属性之间的缩进和对齐。
3)缩进不允许使用tab,只允许空格。
4)属性和值区分字母大小写。

(2)数据类型

YML文件以数据为中心,支持数组、JSON对象、Map等多种数据格式,因此更适合用作配置文件。

(1)普通的值(数字、字符串、布尔值)

普通的数据通过k:v的键值对形式直接编写,普通的值类型或字符串默认不用加上单引号或者双引号。

当然,也可以使用双引号(“”)来转义字符串中的特殊字符,特殊字符转义后就表示它自身的意思,例如:

name: "zhangsan \n lisi"

上面的示例会输出:

zhangsan
lisi

使用单引号(‘’)不会转义特殊字符,所有字符都按照普通字符处理,作为字符串数据,例如:

name: 'zhangsan \n lisi'

上面的示例会输出:zhangsan \n lisi。“\n”字符作为普通的字符串,而不转义为换行。

(2)对象、Map(属性和值)

对象同样是以k:v的键值对方式展现的,只是对象的各个属性和值的关系通过换行和缩进方式来编写。示例代码如下:

person:
	lastName: zhangsan
	age: 20

如果使用行内写法,可以将对象的属性和值写成JSON格式,具体写法如下:

person: {lastName: zhangsan, age: 20}

(3)数组(List、Set)

数组是以- value的形式表示数组中的元素的,具体写法如下:

persons:
 -zhangsan
 -lisi
 -wangwu

还可以采用行内写法,数组使用中括号的形式,具体写法如下:

persons: [zhangsan, lisi, wangwu]

我们可以看到,YML文件除了支持基本的数据类型之外,还支持对象、Map、JSON、数组等格式,这样可以在配置文件中直接定义想要的数据类型,无须额外转换。这也是程序员喜欢用application.yml的原因之一。

3.Properties与YML配置文件的区别

Spring Boot中的配置文件有Properties或者YML两种格式。一般情况下,两者可以随意使用,我们可以根据自己的使用习惯选择适合的配置文件格式。这两者完全一样吗?肯定不是,YML和Properties配置文件的区别如下:

1)YML文件以数据为中心,对于数据的支持和展现非常友好。

2)Properties文件对格式的要求没那么严格,而YML文件以空格的缩进来控制层级关系,对格式的要求比较高,缩进格式不对时容易出错。

3)Properties文件支持@PropertySource注解,而YML文件不支持。

4)YML文件支持多文档块的使用方式,使用起来非常灵活。

5)Properties配置的优先级高于YML文件。因为YML文件的加载顺序先于Properties文件,如果两个文件存在相同的配置,后面加载的Properties中的配置会覆盖前面YML中的配置。

4.实战:自定义系统的启动图案

我们知道Spring Boot程序启动时,控制台会输出由一串字符组成的Spring符号的启动图案(Banner)以及版本信息(见下图)。

在这里插入图片描述

Spring Boot自带的启动图案是否可以自定义呢?

答案是肯定的。下面通过示例来演示如何自定义Spring Boot的启动图案。

步骤01 在项目的resources目录下新建banner.txt,示例代码如下:

在这里插入图片描述
在上面的配置中,通过${}获取application.properties配置文件中的相关配置信息,如Spring Boot版本、应用的版本、应用名称等信息。

${AnsiColor.BRIGHT_RED}:设置控制台中输出内容的颜色,可以自定义,具体参考org.springframework.boot.ansi.AnsiColor。
${application.version}:用来获取MANIFEST.MF文件中的版本号,这就是在Application.java中指定SpringVersion.class的原因。
${application.formatted-version}:格式化后的{application.version}版本信息。
${spring-boot.version}:Spring Boot的版本号。
${spring-boot.formatted-version}:格式化后的{spring-boot.version}版本信息。步骤02 在application.properties中配置banner.txt的路径等信息。

步骤02 在application.properties中配置banner.txt的路径等信息。

在这里插入图片描述

在上面的配置中,在application中设置banner.txt文件的路径、应用的版本、Spring Boot的版本等信息。

步骤03 启动项目,查看修改之后的启动横幅图案是否生效,如图所示。

在这里插入图片描述

通过系统输出的启动日志可以看到,系统的启动图案已经变成我们自定义的样子,也就是Spring Boot的默认启动图案已经更改成自定义的启动图案。

Spring Boot也支持使用GIF、JPG和PNG格式的图片文件来定义横幅图案。当然,并不会把图片直接输出在控制台上,而是将图片中的像素解析并转换成ASCII编码字符之后再输出到控制台上。

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

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

相关文章

pyqt结合深度学习框架做系统

时隔将近两个月,我胡汉三又回来啦!!!将近两个月玩了一个月,半个月面试,半个月吃土沉淀(有收获)也投出去一篇论文(外审中,关于深度学习神经网络改进的一篇病害…

如何将代理IP集成到自动化测试框架中?

自动化测试框架是现代软件工程中不可或缺的一部分。它们提供了许多好处,包括:更快的测试速度,更高的可靠性和更广泛的测试覆盖范围。然而,在测试过程中,有些网站可能需要使用代理IP,这是因为一些网站会限制…

踩坑记录:xorm的sql()函数后无法使用FindAndCount()

一、起因 懒省事想用 sql 写个有连表操作的分页查询语句,看到 xorm 中 sql 要和代码紧密纠缠在一起就不爽,所有就想用 xorm 中的 session.SQL(sql).Limit(size, offset).FindAndCount() 方法解决。不曾想。。。 sql: expected 15 destination argument…

[计算机入门] 磁盘、磁盘分区、盘符、卷标

2.5 磁盘、磁盘分区、盘符、卷标 磁盘:指计算机中存储数据和文件的物理设备,也称为硬盘。 磁盘分区:指将一个磁盘分成多个逻辑部分,每个部分可以独立地进行管理和操作,例如格式化、安装操作系统等。 如上图&#xf…

AWS 中文入门开发教学 46- S3 - AWS的存储核心, Simple Storage Service

知识点 S3的基础知识官网 https://aws.amazon.com/cn/s3 基础介绍 Amazon Simple Storage Service (Amazon S3) 是一种对象存储服务,(其实就是文件存储) 提供行业领先的可扩展性、数据可用性、安全性和性能。这意味着各种规模和行业的客户都可以使用 S3 来存储并保护各种…

归并排序—C语言实现

前言 🥰在学数据结构的第一节课就知道了数据结构课程是要管理并且学会操作数据,当然操作数据首先想到的就是数据的排序,排过顺序的数据的使用价值才够大。前面我们学习了顺序表也学习了链表等等,这些就是储存数据的方法&#xff0…

2021机器学习阶段性复盘

文章目录 特征选择一、GBDT和Xgboost简介二、 GBDTLR协同过滤,SVD的劣势:极大化似然估计Wide&DeepxDeepFM朴素贝叶斯SVM转为拉格朗日函数转为对偶问题 决策树分类交叉熵损失函数数据预处理连续型特征为什么取对数 深度学习激活函数的作用Softmax与Si…

剑指offer64.求1+2+...+n

看到题脑子里就有了想法,这还不简单,直接用递归啊,return一个nsumNums(n-1)写完之后发现到了0你得终止但是不能用if等语句你没办法终止,想了大概十分钟放弃了,这没办法终止啊,然后看了题解。 class Soluti…

QCFS-related work

一、代码 def replace_maxpool2d_by_avgpool2d(model): # 将模型中的所有MaxPool2d层替换为AvgPool2d层。for name, module in model._modules.items(): # 函数使用递归方式遍历模型的所有模块,通过model._modules.items()获取模型的子模块以及它们对应的名称。if …

Java电子招投标采购系统源码-适合于招标代理、政府采购、企业采购

功能描述 1、门户管理:所有用户可在门户页面查看所有的公告信息及相关的通知信息。主要板块包含:招标公告、非招标公告、系统通知、政策法规。 2、立项管理:企业用户可对需要采购的项目进行立项申请,并提交审批,查看所…

【Elasticsearch】文档操作

目录 3.文档操作 3.1.新增文档 3.2.查询文档 3.3.删除文档 3.4.修改文档 3.4.1.全量修改 3.4.2.增量修改 3.5.总结 3.文档操作 3.1.新增文档 语法: POST /索引库名/_doc/文档id {"字段1": "值1","字段2": "值2"…

软件测试当中的测试用例模板,仅供参考

测试用例这块知识、经验,小酋在前面陆续都讲完了。这章提供几种用例模板,作为这块知识的收尾。 - 1 - 测试用例(主指功能测试用例模板)的内容通常包括测试目标(目的),需求标示(一般…

Background-2 盲注关卡 sqli-Labs Less5-Less-6

文章目录 一、Less-5-less-6一、利用left(database(),1)进行尝试1.查看版本号2.查看数据库的长度3.猜测数据库的第一位 二、利用substr(),ascii()函数进行尝试三、利用regexp()获取(2)中users表中的列四、利用ord(),mid函数获取us…

elasticsearch插件ik分词器,无法启动解决方案

首先7以后的版本一定要与es的版本保持一致下载包只能下载这个路径的文件,版本号与自己的es版本保持一致 https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v8.6.0/elasticsearch-analysis-ik-8.6.0.zip这里可以直接替换 docker容器无法启动&…

SLF4J: Failed to load class “org.slf4j.impl.StaticLoggerBinder“

一、现象说明 最近在调试 RabbitMQ 程序的时候,日志里如下错误: SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder". SLF4J: Defaulting to no-operation (NOP) logger implementation SLF4J: See http://www.slf4j.org/cod…

排序算法笔记-快速排序

文章目录 笔记简介时间复杂度空间复杂度解题模版练习题 笔记 简介 快速排序:确定分界数,左边小于分界,右边大于分界数,通过递归来不断重置分界数划分区域,直至完成排序 时间复杂度 最优 n*logn 最差 n^2 空间复杂…

找工作不用愁!送你一份Salesforce顾问面试秘籍(下)(含答案)

作为SaaS行业的先驱,Salesforce的发展一路高歌猛进。在Salesforce生态系统中不仅能学习到最新的技术,而且比其他行业的同岗位享有更高的薪水,这也驱使了越来越多人加入Salesforce大军。 在之前的文章中,自由侠部落为学习者梳理了…

Qt6之QSetting读取为空或失败

一、目的 QSetting终极目的是,模糊平台,一套方法可以同时写入或者读取配置文件及注册表。 二、问题 QSetting确实兼顾了平台,linux、mac、windows三大平台均能使用,但就像所有事物一样,大一统的背后必定要做出一些让步…

STM32 Proteus仿真水箱水塔水位温度控制系统DS18B20 -0065

STM32 Proteus仿真水箱水塔水位温度控制系统DS18B20 -0065 Proteus仿真小实验: STM32 Proteus仿真水箱水塔水位温度控制系统DS18B20 -0065 功能: 硬件组成:STM32F103C8单片机 LCD1602显示器ADC220V转3.3V电路DS18B20温度多个按键&#xf…

刚刚出炉,速看7月编程语言排行榜

2023年已经过半,最新一期的编程语言排行榜你看了吗?刚刚,全球知名编程语言社区TIOBE公布了7月榜单, TIOBE 7 月 TOP 15 编程语言: 详细榜单可参考官网: https://www.tiobe.com/tiobe-index/ 在众多编程语…