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

SpringBoot-yml配置文件的使用与优势

目录

一、什么是yml配置文件?

 二、如何在SpringBoot中使用yml配置文件?

三、如何在SpringBoot中注入yml配置文件的属性?

@Value注解

 @ConfigurationProperties注解

四、yml配置文件与properties配置文件的区别和优势 

区别

优势

五、总结


一、什么是yml配置文件?

yml是一种数据序列化语言,它以数据为中心,而不是以标记语言为重点。它使用空格缩进和大量依赖外观的特色,特别适合用来表达或编辑数据结构、各种配置文件、倾印调试内容等。

yml的语法和其他高级语言类似,并且可以简单表达清单、散列表、标量等数据形态。它支持多种数据类型,如对象、数组、纯量等。

yml的基本语法如下:

  • 使用冒号(:)表示键值对,冒号后面必须跟一个空格
  • 使用短横线(-)表示列表项,短横线后面必须跟一个空格
  • 使用缩进表示层级关系,缩进必须使用空格,不能使用制表符(tab)
  • 使用井号(#)表示注释,井号后面必须跟一个空格
  • 使用三个连续的短横线(—)表示多文档块的开始,可以在一个文件中定义多个环境
  • 使用三个连续的句点(…)表示多文档块的结束

例如:

# 这是一个yml配置文件示例
server:port: 8080 # 端口号servlet:context-path: /demo # 上下文路径
spring:datasource: # 数据源配置url: jdbc:mysql://localhost:3306/test # 数据库连接地址username: root # 用户名password: 123456 # 密码driver-class-name: com.mysql.cj.jdbc.Driver # 驱动类名profiles: # 环境配置active: dev # 激活开发环境---
# 开发环境配置
spring:profiles: dev # 环境名称application:name: demo-dev # 应用名称---
# 生产环境配置
spring:profiles: prod # 环境名称application:name: demo-prod # 应用名称

 二、如何在SpringBoot中使用yml配置文件?

SpringBoot支持两种格式的配置文件,一种是properties,另一种是yml。默认情况下,SpringBoot会在resources目录下寻找名为application.properties或application.yml的文件作为全局配置文件。

如果想要使用yml格式的配置文件,我们可以在resources目录下创建一个名为application.yml的文件,并按照yml的语法编写我们需要的属性。

如果我们想要使用多个yml配置文件,例如针对不同的环境或功能模块,我们可以在resources目录下创建多个名为application-{profile}.yml的文件,其中{profile}是自定义的环境或模块名称。

例如:

# application.yml 全局配置文件
server:port: 8080---
# application-dev.yml 开发环境配置文件
spring:profiles: dev # 环境名称datasource:url: jdbc:mysql://localhost:3306/devdb # 开发数据库地址---
# application-prod.yml 生产环境配置文件
spring:profiles: prod # 环境名称datasource:url: jdbc:mysql://localhost:3306/proddb # 生产数据库地址

如果我们想要切换不同的环境或模块,我们可以在全局配置文件中指定spring.profiles.active属性,或者在启动参数中添加–spring.profiles.active参数。

例如:

# application.yml 全局配置文件
server:port: 8080
spring:profiles:active: dev # 激活开发环境

或者

java -jar demo.jar --spring.profiles.active=prod # 激活生产环境

三、如何在SpringBoot中注入yml配置文件的属性?

在SpringBoot中,我们可以使用@Value注解或者@ConfigurationProperties注解来注入yml配置文件的属性到我们的Java类中。

@Value注解

@Value注解可以用来注入单个属性,它的语法是@Value(“${属性名}”),其中属性名可以是yml配置文件中定义的任意键值对的键。

例如:

# application.yml 配置文件
server:port: 8080
name: Tom
age: 20
// DemoController.java 控制器类
@RestController
public class DemoController {// 注入server.port属性@Value("${server.port}")private int port;// 注入name属性@Value("${name}")private String name;// 注入age属性@Value("${age}")private int age;// 显示属性值@GetMapping("/show")public String show() {return "port: " + port + ", name: " + name + ", age: " + age;}

 @ConfigurationProperties注解

@ConfigurationProperties注解可以用来注入一组属性,它的语法是@ConfigurationProperties(prefix = “前缀”),其中前缀可以是yml配置文件中定义的任意对象的键。

例如:

# application.yml 配置文件
server:port: 8080
person:name: Tomage: 20hobbies:- reading- writing
// Person.java 实体类
@Component // 声明为组件,让Spring容器扫描和管理
@ConfigurationProperties(prefix = "person") // 指定前缀为person
public class Person {// 定义与yml配置文件中相同的属性名和类型,注意要有getter和setter方法private String name;private int age;private List<String> hobbies;// getter and setter methods}
// DemoController.java 控制器类
@RestController
public class DemoController {// 注入Person实例,它已经自动绑定了yml配置文件中的person对象的属性值@Autowiredprivate Person person;// 显示属性值@GetMapping("/show")public String show() {return "name: " + person.getName() + ", age: " + person.getAge() + ", hobbies: " + person.getHobbies();}
}

四、yml配置文件与properties配置文件的区别和优势 

yml配置文件与properties配置文件都是SpringBoot支持的两种配置文件格式,它们都可以用来定义和管理应用程序的属性。那么,它们有什么区别和优势呢?

区别

  • yml配置文件使用冒号(:)表示键值对,properties配置文件使用等号(=)表示键值对。
  • yml配置文件使用缩进表示层级关系,properties配置文件使用点号(.)表示层级关系。
  • yml配置文件支持多文档块,可以在一个文件中定义多个环境或模块,properties配置文件不支持多文档块,需要创建多个文件来定义多个环境或模块。
  • yml配置文件支持多种数据类型,如对象、数组、纯量等,properties配置文件只支持字符串类型。

优势

  • yml配置文件更简洁,更易读,更易写,没有冗余的符号和重复的内容。
  • yml配置文件更灵活,更强大,可以表达更丰富的数据结构和格式。
  • yml配置文件更方便,更高效,可以在一个文件中定义和切换多个配置好的yml文件

五、总结

本文介绍了yml配置文件的语法、特点和使用方法,并与properties配置文件进行了对比,分析了yml配置文件的优势和局限性。我们可以看出,yml配置文件是一种更简洁、更灵活、更方便的配置文件格式,它可以让我们更容易地管理和切换不同环境或模块的配置。当然,yml配置文件也有一些需要注意的地方,如缩进、空格、数据类型等,我们需要遵循yml的语法规则,否则可能会导致配置文件无效或出现错误。

相关文章:

SpringBoot-yml配置文件的使用与优势

目录 一、什么是yml配置文件&#xff1f; 二、如何在SpringBoot中使用yml配置文件&#xff1f; 三、如何在SpringBoot中注入yml配置文件的属性&#xff1f; Value注解 ConfigurationProperties注解 四、yml配置文件与properties配置文件的区别和优势 区别 优势 五、总结…...

Layer Normalization(层规范化)

详细内容在这篇论文&#xff1a;Layer Normalization 训练深度神经网络需要大量的计算&#xff0c;减少计算时间的一个有效方法是规范化神经元的活动&#xff0c;例如批量规范化BN&#xff08;batch normalization&#xff09;技术&#xff0c;然而&#xff0c;批量规范化对小批…...

redisson参数配置

文章目录 pom配置链接配置建议 pom <!-- 引入spring-data-redis组件 --> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId><exclusions><!-- 因springboot2.x…...

【基于Arduino的仿生蚂蚁机器人】

【基于Arduino的仿生蚂蚁机器人】 1. 概述2. Arduino六足位移台–蚂蚁机器人3D模型3. 3D 打印零件4. 组装Arduino六足位移台5. Arduino蚂蚁机器人电路图6. 为Arduino Hexapod设计PCB7. 组装电路板8. 系统代码9. Arduino蚂蚁机器人安卓应用程序在本教程中,我将向您展示如何构建…...

angular12里面FormGroup做多个项目的相关check

FromFroup在鼠标失去焦点时做相关check&#xff0c;可以在group方法第二个参数的位置加一个对象参数 { validator: this.checkPasswords } 在Angular 12中&#xff0c;可以使用formGroup来进行两个密码是否一致的检查。以下是一个示例&#xff1a; 首先&#xff0c;在组件的…...

TypeScript 的发展与基本语法

目录 一、为什么什么是TypeScript&#xff1f; 1、发展历史 2、typescript与javascript 3、静态类型的好处 二、基础语法 1、基础数据类型 2、补充类型 3、泛型 4、泛型的高级语法 5、类型别名&类型断言 6、字符串/数字 字面量 三、高级类型 1、联合/交叉类型…...

macOS - 上编译运行 risc-v (spike)

文章目录 一、说明二、安装步骤三、测试 一、说明 本文根据以下文章改编&#xff1a; RISC-V 环境配置 https://decaf-lang.github.io/minidecaf-tutorial/docs/step0/riscv_env.html 相关链接&#xff1a; riscv-gnu-toolchain GNU toolchain for RISC-V, including GCC ht…...

Linux--线程地址空间

1.程序地址空间 先来就看这张图 这是一张程序地址分布的图&#xff0c;通过一段代码来证明地址空间的分布情况 编译结果&#xff1a; 可以看出的是&#xff0c;父子进程中对于同一个变量打印的地址是一样的&#xff0c;这是因为子进程以父进程为模板&#xff0c;因为都没有对数…...

华为OD机试 - 最佳植树距离 - 二分查找(Java 2023 B卷 100分)

目录 一、题目描述二、输入描述三、输出描述四、备注说明五、二分查找六、解题思路七、Java算法源码八、效果展示1、输入2、输出3、说明 一、题目描述 按照环保公司要求&#xff0c;小明需要在沙化严重的地区进行植树防沙工作&#xff0c;初步目标是种植一条直线的树带。 由于…...

RNN+LSTM正弦sin信号预测 完整代码数据视频教程

视频讲解:RNN+LSTM正弦sin信号预测_哔哩哔哩_bilibili 效果演示: 数据展示: 完整代码: import torch import torch.nn as nn import torch.optim as optim import numpy as np import matplotlib.pyplot as plt import pandas as pd from sklearn.preprocessing import…...

如何自己实现一个丝滑的流程图绘制工具(四)bpmn-js开启只读状态

背景 流程图需要支持只读状态和编辑状态 翻看官方案例源码&#xff0c;扒拉到了禁用的js代码 DisableModeling.js const TOGGLE_MODE_EVENT toggleMode const HIGH_PRIORITY 10001export default function DisableModeling(eventBus,contextPad,dragging,directEditing,e…...

字节跳动 Git 的正确使用姿势与最佳实践

版本控制Git 黑马&尚硅谷 Git的前世今生 方向介绍 为什么要学习Git 1.0 Git是什么 1.1 版本控制 1.1.1 本地版本控制 1.1.2 集中版本控制 1.1.3 分布式版本控制 我们已经把三个不同的版本控制系统介绍完了&#xff0c;Git 作为分布式版本控制工具&#xff0c; 虽然目前来讲…...

龙迅LT7911UX TYPE-C/DP转MIPI/LVDS,内有HDCP

1. 描述 LT7911UX是一种高性能的Type-C/DP1.4a到MIPI或LVDS芯片。HDCP RX作为HDCP中继器的上游端&#xff0c;可以与其他芯片的HDCP TX协同工作&#xff0c;实现中继器的功能。 对于DP1.4a输入&#xff0c;LT7911UX可以配置为1/2/4车道。自适应均衡使其适用于长电缆应用&#…...

Spearman Footrule距离

Spearman Footrule距离是一种用于衡量两个排列之间差异的指标。它衡量了将一个排列变换为另一个排列所需的操作步骤&#xff0c;其中每个操作步骤都是交换相邻元素。具体而言&#xff0c;Spearman Footrule距离是每个元素在两个排列中的排名差的绝对值之和。 这个指标的名字中…...

docker 安装 Wordpress 用lnmp搭建出现的故障

第一个故障就是mysql出现的故障了 你起mysql镜像是这么起的导致pid号用不了 docker run --namemysql -d --privileged --device-write-bps /dev/sda:10M -v /usr/local/mysql --net mynetwork --ip 172.20.0.20 mysql:lnmp 解决方法 docker run --namemysql -d --privilege…...

【C++入门到精通】C++入门 —— 继承(基类、派生类和多态性)

阅读导航 前言一、继承的概念及定义1. 继承的概念2.继承的定义⭕定义格式⭕继承关系和访问限定符⭕继承基类成员访问方式的变化 二、基类和派生类对象赋值转换三、继承中的作用域四、派生类的默认成员函数五、继承与友元六、继承与静态成员七、复杂的菱形继承及菱形虚拟继承⭕单…...

【Spring框架】Spring事务的介绍与使用方法

⚠️ 再提醒一次&#xff1a;Spring 本身并不实现事务&#xff0c;Spring事务 的本质还是底层数据库对事务的支持。你的程序是否支持事务首先取决于数据库 &#xff0c;比如使用 MySQL 的话&#xff0c;如果你选择的是 innodb 引擎&#xff0c;那么恭喜你&#xff0c;是可以支持…...

七夕特别篇 | 浪漫的Bug

文章目录 前言一、迷失的爱情漩涡&#xff08;多线程中的错误同步&#xff09;1.1 Bug 背景1.2 Bug 分析1.3 Bug 解决 二、心形积分之恋&#xff08;心形面积计算中的数值积分误差&#xff09;1.1 Bug 背景1.1.1 背景1.1.2 数学模型 1.2 Bug 分析1.2.1 初始代码1.2.2 代码工作流…...

数据结构双向链表

Hello&#xff0c;好久不见&#xff0c;今天我们讲链表的双向链表&#xff0c;这是一个很厉害的链表&#xff0c;带头双向且循环&#xff0c;学了这个链表&#xff0c;你会发现顺序表的头插头删不再是一个麻烦问题&#xff0c;单链表的尾插尾删也变得简单起来了&#xff0c;那废…...

解决政务审计大数据传输难题!镭速传输为政务行业提供解决方案

政务行业是国家治理的重要组成部分&#xff0c;涉及到国家安全、社会稳定、民生福祉等方面。随着信息技术的快速发展和革新&#xff0c;政务信息化也迎来了新一轮的升级浪潮。国家相继出台了《国家信息化发展战略纲要》《“十三五”国家信息化规划》《“十四五”推进国家政务信…...

浏览器访问 AWS ECS 上部署的 Docker 容器(监听 80 端口)

✅ 一、ECS 服务配置 Dockerfile 确保监听 80 端口 EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]或 EXPOSE 80 CMD ["python3", "-m", "http.server", "80"]任务定义&#xff08;Task Definition&…...

服务器硬防的应用场景都有哪些?

服务器硬防是指一种通过硬件设备层面的安全措施来防御服务器系统受到网络攻击的方式&#xff0c;避免服务器受到各种恶意攻击和网络威胁&#xff0c;那么&#xff0c;服务器硬防通常都会应用在哪些场景当中呢&#xff1f; 硬防服务器中一般会配备入侵检测系统和预防系统&#x…...

《用户共鸣指数(E)驱动品牌大模型种草:如何抢占大模型搜索结果情感高地》

在注意力分散、内容高度同质化的时代&#xff0c;情感连接已成为品牌破圈的关键通道。我们在服务大量品牌客户的过程中发现&#xff0c;消费者对内容的“有感”程度&#xff0c;正日益成为影响品牌传播效率与转化率的核心变量。在生成式AI驱动的内容生成与推荐环境中&#xff0…...

如何在看板中有效管理突发紧急任务

在看板中有效管理突发紧急任务需要&#xff1a;设立专门的紧急任务通道、重新调整任务优先级、保持适度的WIP&#xff08;Work-in-Progress&#xff09;弹性、优化任务处理流程、提高团队应对突发情况的敏捷性。其中&#xff0c;设立专门的紧急任务通道尤为重要&#xff0c;这能…...

LLM基础1_语言模型如何处理文本

基于GitHub项目&#xff1a;https://github.com/datawhalechina/llms-from-scratch-cn 工具介绍 tiktoken&#xff1a;OpenAI开发的专业"分词器" torch&#xff1a;Facebook开发的强力计算引擎&#xff0c;相当于超级计算器 理解词嵌入&#xff1a;给词语画"…...

20个超级好用的 CSS 动画库

分享 20 个最佳 CSS 动画库。 它们中的大多数将生成纯 CSS 代码&#xff0c;而不需要任何外部库。 1.Animate.css 一个开箱即用型的跨浏览器动画库&#xff0c;可供你在项目中使用。 2.Magic Animations CSS3 一组简单的动画&#xff0c;可以包含在你的网页或应用项目中。 3.An…...

NPOI操作EXCEL文件 ——CAD C# 二次开发

缺点:dll.版本容易加载错误。CAD加载插件时&#xff0c;没有加载所有类库。插件运行过程中用到某个类库&#xff0c;会从CAD的安装目录找&#xff0c;找不到就报错了。 【方案2】让CAD在加载过程中把类库加载到内存 【方案3】是发现缺少了哪个库&#xff0c;就用插件程序加载进…...

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

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

毫米波雷达基础理论(3D+4D)

3D、4D毫米波雷达基础知识及厂商选型 PreView : https://mp.weixin.qq.com/s/bQkju4r6med7I3TBGJI_bQ 1. FMCW毫米波雷达基础知识 主要参考博文&#xff1a; 一文入门汽车毫米波雷达基本原理 &#xff1a;https://mp.weixin.qq.com/s/_EN7A5lKcz2Eh8dLnjE19w 毫米波雷达基础…...

wpf在image控件上快速显示内存图像

wpf在image控件上快速显示内存图像https://www.cnblogs.com/haodafeng/p/10431387.html 如果你在寻找能够快速在image控件刷新大图像&#xff08;比如分辨率3000*3000的图像&#xff09;的办法&#xff0c;尤其是想把内存中的裸数据&#xff08;只有图像的数据&#xff0c;不包…...