【SpringBoot】两种配置文件, 详解 properties 和 yml 的语法格式, 使用方式, 读取配置

news2025/3/13 7:03:34

文章目录

  • 前言
  • 一、配置文件的作用
  • 二、两种配置文件格式
    • 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=utf8
 	username: root
  	password: 数据库的密码

在 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(“类或集合的名称”)

以上就是本篇的所有内容了, 如果本篇对你有帮助,请点赞收藏支持一下,小手一抖就是对作者莫大的鼓励啦😋😋😋~


上山总比下山辛苦
下篇文章见

在这里插入图片描述

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

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

相关文章

SpringBoot整合JUnit、MyBatis、SSM

&#x1f40c;个人主页&#xff1a; &#x1f40c; 叶落闲庭 &#x1f4a8;我的专栏&#xff1a;&#x1f4a8; c语言 数据结构 javaEE 操作系统 石可破也&#xff0c;而不可夺坚&#xff1b;丹可磨也&#xff0c;而不可夺赤。 SpringBoot整合 一、SpringBoot整合JUnit二、Spri…

基于微服务、Java、Springcloud、Vue、MySQL开发的智慧工地管理系统源码

智慧工地聚焦施工现场岗位一线&#xff0c;围绕“人、机、料、法、环”五大要素&#xff0c;数字化工地平台与现场多个子系统的互联实现了工地业务间的互联互通和协同共享。数字化工地管理平台能够盘活工地各大项目之间孤立的信息系统&#xff0c;实现数据的统一接入、处理与维…

一百六十七、MySQL——MySQL8.0连接jdbc报错(持续更新中)

一、目的 在编写海豚的部署脚本时&#xff0c;遇到MySQL的jdbc连接报错问题&#xff0c;发现这与hive部署里MySQL的jdbc连接也不同 二、MySQL版本 mysql> select version(); ----------- | version() | ----------- | 8.0.31 | ----------- 1 row in set (0.00 sec) …

基于贝叶斯的数据检测:软信息利用和交换

一般星座点的先验分布 我们考虑通信系统中常用的QAM信号&#xff0c;比如BPSK、QPSK、16QAM等。定义星座点集合为 S \mathcal S S&#xff0c;那么&#xff0c;我们考虑一个一般的先验分布 p ( x ) ( 1 − γ ) δ ( x ) γ ∑ i p s i ( s i ) δ ( x − s i ) p(x) (1- …

linux创建进程

linux创建进程 准备工作 准备工作 在Ubuntu64系统上 1、安装GCC和Make工具 编译器GCC&#xff1a;把C源码转为二进制程序 Make&#xff1a;自动编译多源文件项目 sudo apt-get update #更新存储库 sudo apt-get install build-essential #安装build-essential包 gcc --versio…

千人千面的数据分析有没可能?奥威BI数据可视化工具告诉你

数据分析要做到千人千面&#xff0c;就意味着不同角色的用户在分析报表时&#xff0c;都可以站在自身的立场、按照自己的分析思维变化去展开数据分析&#xff0c;更多维地获取数据信息。以前受制于平台技术发展无法实现&#xff0c;现在随着BI智能数据可视化分析技术的发展&…

前端:实现确认取消提示框

效果 代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widthdevice-width, i…

MVVM架构模式

目录 一、MVVM简介二、MVVM结构三、MVC四、MVP五、MVVM的优势与存在的问题 一、MVVM简介 MVVM是Model-View-ViewModel的简写。即是模型-视图-视图模型。 MVVM架构模式是一种软件设计模式&#xff0c;它将应用程序分为三个部分&#xff1a;模型&#xff08;Model&#xff09;、…

Databend 开源周报第 108 期

Databend 是一款现代云数仓。专为弹性和高效设计&#xff0c;为您的大规模分析需求保驾护航。自由且开源。即刻体验云服务&#xff1a;https://app.databend.cn 。 Whats On In Databend 探索 Databend 本周新进展&#xff0c;遇到更贴近你心意的 Databend 。 多源数据目录 …

WebDAV之π-Disk派盘 + 小象记账

小象记账是一款非常干净便捷的手机记账软件,这款软件的界面非常的简洁,整体以大面积的背景色、文字与符号的黑灰色为主,非常的简约,而且它的字体采用的是幼圆类字体并提高了字重,与整体的设计风格交相呼应,不仅提升了文字可读性还减少了用户的视觉疲劳。除了出色的外表之…

AMEYA360:兆易创新获得ISO 26262 ASIL D流程认证, 汽车功能安全管理体系再上新台阶

中国北京(2023年8月29日) —— 业界半导体器件供应商兆易创新GigaDevice(股票代码 603986)今日宣布&#xff0c;获得由国际公认的测试、检验和认证机构通标标准技术服务有限公司(以下简称SGS)授予的ISO 26262:2018汽车功能安全最高等级ASIL D流程认证证书&#xff0c;这标志着兆…

考研408 | 【操作系统】 文件管理

初识文件管理 文件属性&#xff1a; 文件内部的数据应该怎样组织起来&#xff1f; 操作系统应该向上提供哪些功能&#xff1f; 从上往下看&#xff0c;文件应该如何存放在外存&#xff1f; 其他需要由操作系统实现的文件管理功能 总结&#xff1a; 文件的逻辑结构 无结构文…

vue可编辑表格

内容包含:校验。下拉框。输入框。日期控件 效果图 1.代码目录 2.index.js import SjjEditable from ./src/editable.vue // import Vue from vueSjjEditable.install = function (Vue) {Vue.component(SjjEditable.name, SjjEditable) }export default SjjEditable 3.util…

G4学术期刊《中小学电教》期刊简介//投稿要求

G4学术期刊《中小学电教》期刊简介//投稿要求 《中小学电教》 由吉林省教育厅主管&#xff0c;吉林省电教馆主办的基础教育期刊&#xff0c;围绕各级中学、小学和幼儿园的现代教育技术、包括常规电教、信息技术教育、网络教育和远程教育等教育技术领域的理论、热点和重点问题的…

多模态论文串讲(bryanyzhu老师)记录

文章目录 回顾ViLT和CLIP序言ALBEF摘要方法实验 VLMo引言方法实验 BLIP引言实验 CoCaBeiTv3摘要方法实验 总结 传统的多模态: 检索, 视觉问答(闭集,分类,开集,生成), 视觉推理(判断文本能否描述图像), 视觉蕴含(给定假设能否推理出前提) 新颖的多模态: language-guided detecti…

韶音的耳机怎么样,韶音骨传导耳机防水吗

韶音耳机在电声学这方面还是有着比较成熟的骨传导技术&#xff0c;现如今关于骨传导领域的耳机是有着韶音OpenRun Pro以及OpenSwim&#xff0c;很显然&#xff0c;通过名字就可以看出是将运动跟游泳给区分开了。 其中韶音OpenRun Pro也是存在着一定的亮点 亮点一&#xff1a; …

简易虚拟培训系统-UI控件的应用1

前言 前面的文章介绍了关于Oculus设备与UI控件的关联&#xff0c;从本文开始采用小示例的方式介绍基本的UI控件在系统中的基本作用&#xff08;仅介绍“基本作用”&#xff0c;详细的API教程可参考官方文档&#xff09;。应用的背景是工程场景类的虚拟培训系统&#xff0c;系统…

最简单的爬虫!只需要粘贴你要爬虫的网址

依赖 必须按照这个库&#xff0c;爬虫必备&#xff01; pip install requests四行代码 import get import save spider_text get.html("https://www.baidu.com/") save.file(spider_text)使用 更改 get.html() 中的参数&#xff0c;改成你想要爬取的网站的地址&…

如何打造创新文化虚拟展厅?一文了解虚拟展厅优势

引言&#xff1a; 时光荏苒&#xff0c;科技在不断进步&#xff0c;创新也不再局限于产品和服务&#xff0c;而是深刻融入各行业的方方面面。在这个充满机遇与挑战的时代&#xff0c;创新文化虚拟展厅应运而生&#xff0c;成为展示创新实力、推动文化传承的独特方式。 一&…

数字孪生技术:智能化引领产业变革

数字孪生作为一项创新性技术&#xff0c;正逐渐引发全球范围内的广泛关注。它不仅仅是一种模拟或仿真工具&#xff0c;更是一种能够深刻影响人类生活和产业的前沿技术。数字孪生的终极价值在于为现实世界带来了前所未有的智能化、精准化和高效化&#xff0c;以及对未来可持续发…