当前位置: 首页 > news >正文

【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
# 设置MyBatisXML保存路径和命名
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 格式的优点 :

  1. yml 是⼀个可读性高, 写法简单、易于理解(我不这么认为hhh), 它的语法和 JSON 语⾔类似
  2. yml ⽀持更多的数据类型, 它可以简单表达清单(数组)、散列表,标量等数据形态. 它使用空白符号缩进和大量依赖外观的特色,特别适合用来表达或编辑数据结构、各种配置文件等
  3. 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)

获取源码或者论文请私信博主 演示视频&#xff1a; 基于微信小程序的文化宣传平台的设计与实现&#xff08;Javaspring boot微信小程序MySQL&#xff09; 使用技术&#xff1a; 前端&#xff1a;html css javascript jQuery ajax thymeleaf 微信小程序 后端&#xff1a;Java…...

一款windows的终端神奇,类似mac的iTem2

终于找到了一款windows的终端神奇。类似mac的iTem2 来&#xff0c;上神器 cmder cmder是一款windows的命令行工具&#xff0c;就是我们的linux的终端&#xff0c;用起来和linux的命令一样。所以我们今天要做的是安装并配置cmder ![在这里插入图片描述](https://img-blog.csdni…...

illegal cyclic inheritance involving trait Iterable_2种解决方式

一、报错内容 /Users/liyangda/Code/DemoProject/demo-scala/src/scala/old04/T4.scala:11:20 illegal cyclic inheritance involving trait Iterableval value List(1, 2, 3, 4, 5, 6, 7, 8)二、问题解决 1、方式一&#xff1a;降低scala版本 可以选择降低Scala的版本&…...

探秘二叉树后序遍历:从叶子到根的深度之旅

本篇博客会讲解力扣“145. 二叉树的后序遍历”的解题思路&#xff0c;这是题目链接。 本题的思路是&#xff1a; 先创建一个数组&#xff0c;用来存储二叉树后序遍历的结果。数组的大小跟树的结点个数有关。树的结点个数可以使用递归实现&#xff0c;即总个数左子树结点个数右…...

2023全国大学生数学建模A题思路+模型+代码+论文(比赛开始后持续更新)

目录 1.A题思路模型&#xff1a;9.7晚上比赛开始后&#xff0c;第一时间更新&#xff0c;获取见文末名片 3 全国大学生数学建模竞赛常见数模问题常见模型分类 3.1 分类问题 3.2 优化问题 详细思路见此名片&#xff0c;开赛第一时间更新 1.A题思路模型&#xff1a;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精通之道】掌握数据遍历:解锁现代化遍历方法,提升开发效率!

​ &#x1f3ac; 岸边的风&#xff1a;个人主页 &#x1f525; 个人专栏 :《 VUE 》 《 javaScript 》 ⛺️ 生活的理想&#xff0c;就是为了理想的生活 ! ​ 目录 &#x1f4da; 前言 &#x1f4d8; 1. reduce方法 &#x1f4d8; 2. forEach方法 &#x1f4d8; 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 的一种新的网络协议。它实现了浏览器与服务器全双工通信——浏览器和服务器只需要完成一次握手&#xff0c;两者之间就可以创建持久性的连接&#xff0c; 并进行双向数据传输 HTTP协议和WebSocket协议对比&#xff1a; HTTP是短连接WebSocket是长连接HT…...

Spring 事务是什么 ?事务的传播机制?

目录 1. 什么是事务&#xff1f; 2. Spring 事务三大基础设施 2.1 PlatformTransactionManager 平台事务管理器 2.2 TransactionDefinition 事务属性定义 2.3 TransactionStatus 事务状态 3. Transaction 注解 4. Spring 事务角色 5. Transaction 注解属性 5.1 事务的…...

黑马最新MybatisPlus教程!帮你实现快速开发

天下武功&#xff0c;唯快不破。在互联网世界中&#xff0c;更甚。产品更新要快、迭代要快、开发速度那必须得快。 在追求“快”的这条路上&#xff0c;大佬们都会使用上好的开发工具&#xff0c;来帮助自己实现高效开发&#xff0c;其中MybatisPlus便是提速的重要角色。 我们…...

秒杀场景下用乐观锁解决超卖问题

前言 超卖问题通常出现在多用户并发操作的情况下&#xff0c;即多个用户尝试购买同一件商品&#xff0c;导致商品库存不足或者超卖。解决超卖问题的方法有很多&#xff1a;乐观锁、Redis分布式锁、消息队列等。 为什么用乐观锁不用悲观锁来解决&#xff1f; 因为在秒杀场景下&…...

技术实践|Hive数据迁移干货分享

导语 Hive是基于Hadoop构建的一套数据仓库分析系统&#xff0c;可以将结构化的数据文件映射为一张数据库表&#xff0c;并提供完整的SQL查询功能。它的优点是可以通过类SQL语句快速实现简单的MapReduce统计&#xff0c;不用再开发专门的MapReduce应用程序&#xff0c;从而降低…...

The remote endpoint was in state [TEXT_FULL_WRITING]

报这个错是因为在websocket接收与发送消息时&#xff0c;资源互抢造成的&#xff0c;有很多帖子说将session锁住&#xff0c; 但是同一个账号多个客户端登陆的时候&#xff0c;session是不同的&#xff0c;所以只能锁住一个session&#xff0c;还是出现这个问题。 解决办法&a…...

微信小程序ios下,border显示不全兼容问题解决

小程序在ios系统中&#xff0c;如果border小于1px的情况下&#xff0c;border就可能显示不全(可能少了上下左右任意一边) 只需要加一个::after或::before伪类&#xff0c;使用绝对定位定在原来元素上边就不会产生问题了&#xff01; .d_card_line1_tag {padding: 1rpx 14rpx;…...

《Effective C++中文版,第三版》读书笔记6

条款32&#xff1a;确定你的public继承塑模出is-a关系 简单知识点回顾&#xff08;若不知道那就是扫盲了&#xff09;&#xff1a; is-a关系&#xff1a;子类public继承父类。比如说Apublic继承了B。我们可以说A是B的一种特殊情况 has-a关系&#xff1a;指的是一种组合关系&…...

【Docker 】Docker 客户端,容器使用,启动容器,启动已停止运行的容器,停止一个容器,进入容器

作者简介&#xff1a; 辭七七&#xff0c;目前大一&#xff0c;正在学习C/C&#xff0c;Java&#xff0c;Python等 作者主页&#xff1a; 七七的个人主页 文章收录专栏&#xff1a; 七七的闲谈 欢迎大家点赞 &#x1f44d; 收藏 ⭐ 加关注哦&#xff01;&#x1f496;&#x1f…...

Docker 离线安装指南

参考文章 1、确认操作系统类型及内核版本 Docker依赖于Linux内核的一些特性&#xff0c;不同版本的Docker对内核版本有不同要求。例如&#xff0c;Docker 17.06及之后的版本通常需要Linux内核3.10及以上版本&#xff0c;Docker17.09及更高版本对应Linux内核4.9.x及更高版本。…...

Cursor实现用excel数据填充word模版的方法

cursor主页&#xff1a;https://www.cursor.com/ 任务目标&#xff1a;把excel格式的数据里的单元格&#xff0c;按照某一个固定模版填充到word中 文章目录 注意事项逐步生成程序1. 确定格式2. 调试程序 注意事项 直接给一个excel文件和最终呈现的word文件的示例&#xff0c;…...

云启出海,智联未来|阿里云网络「企业出海」系列客户沙龙上海站圆满落地

借阿里云中企出海大会的东风&#xff0c;以**「云启出海&#xff0c;智联未来&#xff5c;打造安全可靠的出海云网络引擎」为主题的阿里云企业出海客户沙龙云网络&安全专场于5.28日下午在上海顺利举办&#xff0c;现场吸引了来自携程、小红书、米哈游、哔哩哔哩、波克城市、…...

Redis相关知识总结(缓存雪崩,缓存穿透,缓存击穿,Redis实现分布式锁,如何保持数据库和缓存一致)

文章目录 1.什么是Redis&#xff1f;2.为什么要使用redis作为mysql的缓存&#xff1f;3.什么是缓存雪崩、缓存穿透、缓存击穿&#xff1f;3.1缓存雪崩3.1.1 大量缓存同时过期3.1.2 Redis宕机 3.2 缓存击穿3.3 缓存穿透3.4 总结 4. 数据库和缓存如何保持一致性5. Redis实现分布式…...

MySQL中【正则表达式】用法

MySQL 中正则表达式通过 REGEXP 或 RLIKE 操作符实现&#xff08;两者等价&#xff09;&#xff0c;用于在 WHERE 子句中进行复杂的字符串模式匹配。以下是核心用法和示例&#xff1a; 一、基础语法 SELECT column_name FROM table_name WHERE column_name REGEXP pattern; …...

laravel8+vue3.0+element-plus搭建方法

创建 laravel8 项目 composer create-project --prefer-dist laravel/laravel laravel8 8.* 安装 laravel/ui composer require laravel/ui 修改 package.json 文件 "devDependencies": {"vue/compiler-sfc": "^3.0.7","axios": …...

STM32---外部32.768K晶振(LSE)无法起振问题

晶振是否起振主要就检查两个1、晶振与MCU是否兼容&#xff1b;2、晶振的负载电容是否匹配 目录 一、判断晶振与MCU是否兼容 二、判断负载电容是否匹配 1. 晶振负载电容&#xff08;CL&#xff09;与匹配电容&#xff08;CL1、CL2&#xff09;的关系 2. 如何选择 CL1 和 CL…...

Bean 作用域有哪些?如何答出技术深度?

导语&#xff1a; Spring 面试绕不开 Bean 的作用域问题&#xff0c;这是面试官考察候选人对 Spring 框架理解深度的常见方式。本文将围绕“Spring 中的 Bean 作用域”展开&#xff0c;结合典型面试题及实战场景&#xff0c;帮你厘清重点&#xff0c;打破模板式回答&#xff0c…...

9-Oracle 23 ai Vector Search 特性 知识准备

很多小伙伴是不是参加了 免费认证课程&#xff08;限时至2025/5/15&#xff09; Oracle AI Vector Search 1Z0-184-25考试&#xff0c;都顺利拿到certified了没。 各行各业的AI 大模型的到来&#xff0c;传统的数据库中的SQL还能不能打&#xff0c;结构化和非结构的话数据如何和…...

k8s从入门到放弃之HPA控制器

k8s从入门到放弃之HPA控制器 Kubernetes中的Horizontal Pod Autoscaler (HPA)控制器是一种用于自动扩展部署、副本集或复制控制器中Pod数量的机制。它可以根据观察到的CPU利用率&#xff08;或其他自定义指标&#xff09;来调整这些对象的规模&#xff0c;从而帮助应用程序在负…...