【SpringBoot】两种配置文件, 详解 properties 和 yml 的语法格式, 使用方式, 读取配置
文章目录
- 前言
- 一、配置文件的作用
- 二、两种配置文件格式
- 1, properties 格式语法
- 2, properties 格式缺点
- 3, yml 格式语法
- 4, yml 格式缺点
- 5, yml 支持更多类型
- 三、配置文件的读取
- 三、不同环境下的配置文件
- 总结
前言
各位读者好, 我是小陈, 这是我的个人主页, 希望我的专栏能够帮助到你:
📕 JavaSE基础: 基础语法, 类和对象, 封装继承多态, 接口, 综合小练习图书管理系统等
📗 Java数据结构: 顺序表, 链表, 堆, 二叉树, 二叉搜索树, 哈希表等
📘 JavaEE初阶: 多线程, 网络编程, TCP/IP协议, HTTP协议, Tomcat, Servlet, Linux, JVM等(正在持续更新)

提示:是正在努力进步的小菜鸟一只,如有大佬发现文章欠佳之处欢迎批评指点~ 废话不多说,直接上干货!
一、配置文件的作用
项目中很多重要的数据都是在配置文件中配置的, 比如:
- 数据库的连接信息
- 项目的启动端口
- 第三方系统的调用秘钥等信息
- 设置日志打印级别, 设置保存日志的路径, 发现和定位问题的普通日志和异常日志
- …
就拿第一条来说, 如果你的项目中没有配置文件, 那你怎么连接到你要使用的数据库呢?
二、两种配置文件格式
SpringBoot 中主要有两种配置文件格式 : properties 和 yml(YAML)
- properties 是默认的配置文件格式, 项目创建好之后就存在

- 要想使用 yml 格式, 可以在 resource 目录下手动创建, 命名为xxx.yml

理论上讲 properties 可以和 yml ⼀起存在于⼀个项目当中, 但是当 properties 和 yml ⼀起存在⼀个项目中时, 如果配置文件中出现了同样的配置, 比如 properties 和 yml 中都配置了 “server.port(端口号)”, 那么会以 properties 中的配置为主, 但加载
完 properties 文件之后, 也会加载 yml 文件的配置信息
虽然理论上来讲 properties 可以和 yml 共存, 但实际的业务当中, 通常会采取其中⼀种统⼀的配置文件格式, 这样可以更好的维护(降低故障率)
1, properties 格式语法
properties 是以键值的形式配置的,key 和 value 之间是以 “=” 连接的
使用 # 添加注释
# 配置项目启动端口号, (默认就是8080, 因为SpringBoot内嵌了tomcat, 但你可以修改成任其他端口号)
server.port=8080
# 配置日志的级别
logging.level.root=info
# 配置日志的保存路径和名称
logging.file.path=D:/log_path
logging.file.name=D:/log_path/springboot1.log
# 设置MySQL的链接信息
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/要使用的数据库的库名?characterEncoding=utf8
spring.datasource.username=root
spring.datasource.password=连接的数据库的密码
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
# 设置MyBatis的XML保存路径和命名
mybatis.mapper-locations=classpath:mybatis/*Mapper.xml
这些配置项都是系统配置项, 看不懂没关系, 后续文章会在使用这些配置项时再说明
更多系统配置项可点击查看官方文档
以上都是常用的系统配置项, 但程序员甚至可以自己自定义配置项, 下面会介绍系统配置项和自定义配置项的读取方式
# 自定义配置
name=张三
age=20
imagepath=D:\\image\\
2, properties 格式缺点
上述配置项中有这么一段 :
# 设置MySQL的链接信息
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/要使用的数据库的库名?characterEncoding=utf8
spring.datasource.username=root
spring.datasource.password=连接的数据库的密码
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
你会发现, 这几行都是 spring.datasource 开头的, 这就造成一定程度的代码冗余, 写起来比较麻烦, yml 就解决了这一缺点
3, yml 格式语法
yml 是 YAML 是缩写, 它的全称 Yet Another Markup Language 翻译成中文是“另⼀种标记语言”
yml 格式的优点 :
- yml 是⼀个可读性高, 写法简单、易于理解(我不这么认为hhh), 它的语法和 JSON 语⾔类似
- yml ⽀持更多的数据类型, 它可以简单表达清单(数组)、散列表,标量等数据形态. 它使用空白符号缩进和大量依赖外观的特色,特别适合用来表达或编辑数据结构、各种配置文件等
- yml 支持更多的编程语言,它不止是 Java 中可以使用, 在 Golang、PHP、Python、Ruby、JavaScript、Perl 中也适用
yml 是树形结构的配置文件, 它的基础语法是“key: value”, 注意 key 和 value 之间使用英文冒号加空格的方式组成的, 其中的空格不可省略

使用 yml 配置数据库连接信息 :
spring:datasource:url: jdbc:mysql://127.0.0.0:3306/要使用的数据库的库名?characterEncoding=utf8username: rootpassword: 数据库的密码
在 java 代码中一个 Tab 键是 4 个格符, 但在这个 yml 文件中一个 Tab 键是 2 个空格符
4, yml 格式缺点
如果配置项信息比较多, 我认为反而不易于读写(写法不如 properties 那么简单)
一旦 key 和 value 忘记了加空格, 或者带有层级的配置项忘记了换行, 换行的位置不对, 就会导致配置失败, 因此不适合新手使用
5, yml 支持更多类型
# 字符串
str1: 你好 \n 你好
str2: '你好 \n 你好'
str3: "你好 \n 你好"
# 布尔值
flag1: true
flag2: false
# 整数
num: 10
# 浮点数
f: 6.666
# null ~代表null
Node: ~
字符串默认不需要加上单引号或者双引号
单引号时, 转义字符无效, /n 就当作字符串 “/n”, 双引号时, 转义字符会生效, /n 就仍然表示换行
yml 还可以配置一个对象 :
# 对象
person:name: 张三age: 18
# 或者使用行内写法表示
student2: {id: 2,name: 李四, age: 15}
yml 还可以配置一个 list 集合
# list集合
colortypes:color:- 红色- 黄色- 蓝色
# 或者使用行内写法 colortypes: {color:[红色,黄色,蓝色]}
三、配置文件的读取
properties 和 yml 都使用 @Value(“${ key 值}”) 的方式可读取对应的 value 值
@RestController
public class TestController {@Value("${name}") // 读取用户自定义的配置private String name;@Value("${server.port}") //读取系统配置项private int port;
}
yml 中如果自定义了类的配置信息, 不能使用 @Value , 而是使用 @ConfigurationProperties(“自定义的类名”), 读取方式如下 :
@RestController
@ConfigurationProperties("person")//这里不需要使用$, 里面的值说yml里定义的类名
public class Person{//字段与yml里的名称相同private String name;private int age;// 下面一定要写 getter() 和 setter() ! ! ! 这里省略了
}
yml 中如果自定义了 list 集合的配置信息, 也使用 @ConfigurationProperties(“自定义的集合名称”) , 读取方式如下 :
@Component
@ConfigurationProperties("colortypes") // 引号里面的值是 yml 里自定义的集合名称
public class TestList {private List<String> color;// 下面一定要写 getter() 和 setter() ! ! ! 这里省略了
}
三、不同环境下的配置文件
企业里面的项目, 一般都有三个环境 : 开发环境, 测试环境, (发布之后)上线运行环境, 不同环境下的配置信息可能不同, 为了避免每次更换环境都需要重新修改配置文件的代码, SpringBoot 支持配置不同环境下的配置文件
因为有可能在正式上线之前, 在开发环境和测试环境反复横跳, 如果上线之后有严重 bug , 一般也得再走一遍流程才能再次发布上线
一般会再创建三个配置文件, 命名为 : application-xxx.properties(或.yml), 加上后缀 -xxx 表示不同环境下的命名区分, 一般使用 dev 表示生产环境, test 表示测试环境, pro 表示上线运行环境
然后在一个公共的配置文件中标识清楚当前项目使用的是哪个配置文件(运行在哪个环境下)

总结
SpringBoot 提供了 properties 和 yml 这两种配置文件格式, 前者语法格式为 key=value , 后者语法格式为 key冒号空格value, 这两种格式都支持自定义配置项
properties 和 yml 的一般配置项使用 @Value(${key值}) 的方式读取对应的 value, yml 中的类或者集合配置项, 使用 @ConfigurationProperties(“类或集合的名称”)
以上就是本篇的所有内容了, 如果本篇对你有帮助,请点赞收藏支持一下,小手一抖就是对作者莫大的鼓励啦😋😋😋~
上山总比下山辛苦
下篇文章见

相关文章:
【SpringBoot】两种配置文件, 详解 properties 和 yml 的语法格式, 使用方式, 读取配置
文章目录 前言一、配置文件的作用二、两种配置文件格式1, properties 格式语法2, properties 格式缺点3, yml 格式语法4, yml 格式缺点5, yml 支持更多类型 三、配置文件的读取三、不同环境下的配置文件总结 前言 各位读者好, 我是小陈, 这是我的个人主页, 希望我的专栏能够帮助…...
基于微信小程序的文化宣传平台的设计与实现(Java+spring boot+微信小程序+MySQL)
获取源码或者论文请私信博主 演示视频: 基于微信小程序的文化宣传平台的设计与实现(Javaspring boot微信小程序MySQL) 使用技术: 前端:html css javascript jQuery ajax thymeleaf 微信小程序 后端:Java…...
一款windows的终端神奇,类似mac的iTem2
终于找到了一款windows的终端神奇。类似mac的iTem2 来,上神器 cmder cmder是一款windows的命令行工具,就是我们的linux的终端,用起来和linux的命令一样。所以我们今天要做的是安装并配置cmder 二、问题解决 1、方式一:降低scala版本 可以选择降低Scala的版本&…...
探秘二叉树后序遍历:从叶子到根的深度之旅
本篇博客会讲解力扣“145. 二叉树的后序遍历”的解题思路,这是题目链接。 本题的思路是: 先创建一个数组,用来存储二叉树后序遍历的结果。数组的大小跟树的结点个数有关。树的结点个数可以使用递归实现,即总个数左子树结点个数右…...
2023全国大学生数学建模A题思路+模型+代码+论文(比赛开始后持续更新)
目录 1.A题思路模型:9.7晚上比赛开始后,第一时间更新,获取见文末名片 3 全国大学生数学建模竞赛常见数模问题常见模型分类 3.1 分类问题 3.2 优化问题 详细思路见此名片,开赛第一时间更新 1.A题思路模型:9.7晚上比…...
从输入URL到页面展示过程:深入解析网络请求与渲染
推荐阅读 项目实战:AI文本OCR识别最佳实践 AI Gamma一键生成PPT工具直达链接 玩转cloud Studio 在线编码神器 玩转 GPU AI绘画、AI讲话、翻译,GPU点亮AI想象空间 资源分享 史上最全文档AI绘画stablediffusion资料分享 AI绘画关于SD,MJ,GPT,SDXL百科全书 AI绘画 stable …...
Go 使用 Gorm 将操作信息集成到链路跟踪 Jaeger,进行增删改查使用举例,并做可视化UI界面展示(附源码)
Go 使用 Gorm 将操作信息集成到链路跟踪 Jaeger,进行增删改查使用举例(附源码)。 为了增强程序的可观测性,方便问题定位,在发起数据库操作请求时我们也可以调用代码统一集成链路跟踪的能力,Jaeger 是当今比较流行的选择。使用 Gorm 来将操作信息集成到 Jaeger 中。 全面…...
【JavaScript精通之道】掌握数据遍历:解锁现代化遍历方法,提升开发效率!
🎬 岸边的风:个人主页 🔥 个人专栏 :《 VUE 》 《 javaScript 》 ⛺️ 生活的理想,就是为了理想的生活 ! 目录 📚 前言 📘 1. reduce方法 📘 2. forEach方法 📘 3. map方法…...
opencv android sdk 使用中的问题
Plugin with id ‘kotlin-android’ not found 在build.gradle(:app)中添加以下内容 buildscript {ext {Kotlin_Verion "1.9.10"}dependencies {classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$Kotlin_Verion"}repositories {mavenCentral()} …...
《向量数据库指南》——向量数据库与人工智能是一对“双生子
在信息化社会中,数据的产生、储存和处理都成为了现代生活和工作中不可或缺的一部分。在这背景下,向量数据和向量数据库出现并发展起来,为我们解决了大量的问题,但同时也引出了新的问题和挑战。 首先,我们需要明白什么是向量数据。在人工智能时代,传统的结构化数据(如文本…...
WebSocket协议
WebSocket 是基于 TCP 的一种新的网络协议。它实现了浏览器与服务器全双工通信——浏览器和服务器只需要完成一次握手,两者之间就可以创建持久性的连接, 并进行双向数据传输 HTTP协议和WebSocket协议对比: HTTP是短连接WebSocket是长连接HT…...
Spring 事务是什么 ?事务的传播机制?
目录 1. 什么是事务? 2. Spring 事务三大基础设施 2.1 PlatformTransactionManager 平台事务管理器 2.2 TransactionDefinition 事务属性定义 2.3 TransactionStatus 事务状态 3. Transaction 注解 4. Spring 事务角色 5. Transaction 注解属性 5.1 事务的…...
黑马最新MybatisPlus教程!帮你实现快速开发
天下武功,唯快不破。在互联网世界中,更甚。产品更新要快、迭代要快、开发速度那必须得快。 在追求“快”的这条路上,大佬们都会使用上好的开发工具,来帮助自己实现高效开发,其中MybatisPlus便是提速的重要角色。 我们…...
秒杀场景下用乐观锁解决超卖问题
前言 超卖问题通常出现在多用户并发操作的情况下,即多个用户尝试购买同一件商品,导致商品库存不足或者超卖。解决超卖问题的方法有很多:乐观锁、Redis分布式锁、消息队列等。 为什么用乐观锁不用悲观锁来解决? 因为在秒杀场景下&…...
技术实践|Hive数据迁移干货分享
导语 Hive是基于Hadoop构建的一套数据仓库分析系统,可以将结构化的数据文件映射为一张数据库表,并提供完整的SQL查询功能。它的优点是可以通过类SQL语句快速实现简单的MapReduce统计,不用再开发专门的MapReduce应用程序,从而降低…...
The remote endpoint was in state [TEXT_FULL_WRITING]
报这个错是因为在websocket接收与发送消息时,资源互抢造成的,有很多帖子说将session锁住, 但是同一个账号多个客户端登陆的时候,session是不同的,所以只能锁住一个session,还是出现这个问题。 解决办法&a…...
微信小程序ios下,border显示不全兼容问题解决
小程序在ios系统中,如果border小于1px的情况下,border就可能显示不全(可能少了上下左右任意一边) 只需要加一个::after或::before伪类,使用绝对定位定在原来元素上边就不会产生问题了! .d_card_line1_tag {padding: 1rpx 14rpx;…...
《Effective C++中文版,第三版》读书笔记6
条款32:确定你的public继承塑模出is-a关系 简单知识点回顾(若不知道那就是扫盲了): is-a关系:子类public继承父类。比如说Apublic继承了B。我们可以说A是B的一种特殊情况 has-a关系:指的是一种组合关系&…...
【Docker 】Docker 客户端,容器使用,启动容器,启动已停止运行的容器,停止一个容器,进入容器
作者简介: 辭七七,目前大一,正在学习C/C,Java,Python等 作者主页: 七七的个人主页 文章收录专栏: 七七的闲谈 欢迎大家点赞 👍 收藏 ⭐ 加关注哦!💖…...
LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明
LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造,完美适配AGV和无人叉车。同时,集成以太网与语音合成技术,为各类高级系统(如MES、调度系统、库位管理、立库等)提供高效便捷的语音交互体验。 L…...
云计算——弹性云计算器(ECS)
弹性云服务器:ECS 概述 云计算重构了ICT系统,云计算平台厂商推出使得厂家能够主要关注应用管理而非平台管理的云平台,包含如下主要概念。 ECS(Elastic Cloud Server):即弹性云服务器,是云计算…...
Python:操作 Excel 折叠
💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...
MFC内存泄露
1、泄露代码示例 void X::SetApplicationBtn() {CMFCRibbonApplicationButton* pBtn GetApplicationButton();// 获取 Ribbon Bar 指针// 创建自定义按钮CCustomRibbonAppButton* pCustomButton new CCustomRibbonAppButton();pCustomButton->SetImage(IDB_BITMAP_Jdp26)…...
学校招生小程序源码介绍
基于ThinkPHPFastAdminUniApp开发的学校招生小程序源码,专为学校招生场景量身打造,功能实用且操作便捷。 从技术架构来看,ThinkPHP提供稳定可靠的后台服务,FastAdmin加速开发流程,UniApp则保障小程序在多端有良好的兼…...
Linux云原生安全:零信任架构与机密计算
Linux云原生安全:零信任架构与机密计算 构建坚不可摧的云原生防御体系 引言:云原生安全的范式革命 随着云原生技术的普及,安全边界正在从传统的网络边界向工作负载内部转移。Gartner预测,到2025年,零信任架构将成为超…...
高防服务器能够抵御哪些网络攻击呢?
高防服务器作为一种有着高度防御能力的服务器,可以帮助网站应对分布式拒绝服务攻击,有效识别和清理一些恶意的网络流量,为用户提供安全且稳定的网络环境,那么,高防服务器一般都可以抵御哪些网络攻击呢?下面…...
GruntJS-前端自动化任务运行器从入门到实战
Grunt 完全指南:从入门到实战 一、Grunt 是什么? Grunt是一个基于 Node.js 的前端自动化任务运行器,主要用于自动化执行项目开发中重复性高的任务,例如文件压缩、代码编译、语法检查、单元测试、文件合并等。通过配置简洁的任务…...
在Mathematica中实现Newton-Raphson迭代的收敛时间算法(一般三次多项式)
考察一般的三次多项式,以r为参数: p[z_, r_] : z^3 (r - 1) z - r; roots[r_] : z /. Solve[p[z, r] 0, z]; 此多项式的根为: 尽管看起来这个多项式是特殊的,其实一般的三次多项式都是可以通过线性变换化为这个形式…...
springboot 日志类切面,接口成功记录日志,失败不记录
springboot 日志类切面,接口成功记录日志,失败不记录 自定义一个注解方法 import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target;/***…...
