yml文件使用

article/2025/8/30 20:43:16

yml文件使用

  • yml文件使用
    • yml文件格式
    • 使用
      • 使用方式一(@ConfigurationProperties)
      • 使用方式二(@Value)
    • JSR303数据校验
    • 总结

yml文件使用

yml文件是springboot推荐使用的配置文件格式,它相较于propertites格式文件更强大,比如可以实现SpEl表达式、松散绑定等等。

yml文件格式

1.key,value格式

k: v //注意冒号后面要跟空格
demo-key: v //松散绑定,对应对象属性demoKey
  1. list格式
k:- v1- v2
k: [v1,v2] //行内写法
  1. map格式
k: {k1: v1,k2: v2}
  1. 占位符
k: ${random.uuid} //生成uuid
k: ${random.int} //生成随机数
k: ${demo.placeholder:default} //如果demo.placeholder存在则使用demo.placeholder的值,否则使用默认值

使用

在java项目中的resources目录下创建application.yml文件

person:id: ${random.uuid}name: 小强first-name: xiaoQiangage: ${random.int}hobby:- 篮球- 足球- 乒乓球grade: {a: 80,b: 90,c: 95}remark: ${person.placeholder:default}备注dog:name: 旺财

使用方式一(@ConfigurationProperties)

创建对应的实体类
Person.java

package com.example.configuration;import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;import java.util.List;
import java.util.Map;@Data
@Component
@ConfigurationProperties(prefix = "person") //将person前缀的配置映射到对象属性
public class Person {private String id;private String name;private String firstName;private Integer age;private List<String> hobby;private Map<String,String> grade;private Dog dog;private String remark;
}

Dog.java

package com.example.configuration;import lombok.Data;@Data
public class Dog {private String name;
}

创建测试类

@SpringBootTest
class ApplicationTests {@Resourceprivate Person person;@Testvoid testConfig(){System.out.println(person);}
}

执行测试方法,返回执行结果如下:

Person(id=0d1e376c-3b62-4213-b4ea-82bf85978f53, name=小强, firstName=xiaoQiang, age=-393568359, hobby=[篮球, 足球, 乒乓球], grade={a=80, b=90, c=95}, dog=Dog(name=旺财), remark=default备注)

从上面的执行结果可以看出所有的配置都已经注入到对应的对象属性中,非常方便。
当然除了以上的方法进行属性注入外,还可以单独注入某一个属性值。

使用方式二(@Value)

我们将Dog类修改一下

package com.example.configuration;import lombok.Data;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;@Data
@Component
public class Dog {@Value("${person.dog.name}")private String name;
}

创建测试类

@SpringBootTest
class ApplicationTests {@Resourceprivate Dog dog;@Testvoid testConfig(){System.out.println(dog);}
}

执行结果如下

Dog(name=旺财)

可以看到@Value注解可以将配置赋值到对象属性。
说到@Value我们还可以指定配置文件进行配置,下面也来演示一下:
添加配置文件demo.properties

dogName=旺财123

修改Dog.java

package com.example.configuration;import lombok.Data;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.PropertySource;
import org.springframework.stereotype.Component;@Data
@Component
@PropertySource(value = "classpath:demo.properties")  //加载指定的配置文件
public class Dog {@Value("${dogName}")private String name;
}

执行测试方法,结果可能会如下出现乱码,那么就要设置IDEA的配置文件格式为UTF-8

Dog(name=旺财123)

修改配置settings–>File Encodings
在这里插入图片描述
修改完成后执行测试方法,得到如下结果:

Dog(name=旺财123)

JSR303数据校验

yaml 文件还支持JSR303数据校验,使用此功能需要引入数据校验的starter

		<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId></dependency>

修改配置文件

person:id: ${random.uuid}name: //将姓名删除first-name: xiaoQiangage: ${random.int}hobby:- 篮球- 足球- 乒乓球grade: {a: 80,b: 90,c: 95}remark: ${person.placeholder:default}备注dog:name: 旺财

Person.java文件做如下修改

package com.example.configuration;import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import org.springframework.validation.annotation.Validated;import javax.validation.constraints.NotBlank;
import java.util.List;
import java.util.Map;@Data
@Validated
@Component
@ConfigurationProperties(prefix = "person")
public class Person {private String id;@NotBlank(message = "姓名不能为空")private String name;private String firstName;private Integer age;private List<String> hobby;private Map<String,String> grade;private Dog dog;private String remark;
}

执行测试方法,此时会出现如下报错,说明数据校验生效了,有了数据校验我们可以有效减少关键配置修改出错的可能性。

Binding to target org.springframework.boot.context.properties.bind.BindException: Failed to bind properties under 'person' to com.example.configuration.Person failed:Property: person.nameValue: Origin: class path resource [application.yml]:47:8Reason: 姓名不能为空

总结

从以上的demo中我们可以看到yml格式文件相较与properties配置文件,功能更加强大,所以我们在做springboot项目开发的时候还是优先考虑使用yml格式配置文件。


http://chatgpt.dhexx.cn/article/BbQ7yLZi.shtml

相关文章

SpringBoot:yml文件详解

目录 获取数据第三种方式 多环境配置 日志打印 过滤器与拦截器的配置 过滤器配置: 拦截器的配置 全局异常处理器 获取数据第三种方式 数据可能是一个对象形式, 不需要一个一个获取, 定义一个对应的类, 要求属性与yml的数据的二级属性名一样, 使用springboot提供的注解Co…

qq图

最近在做关联分析的时候&#xff0c;研究了一下QQ图的绘制方法 QQ图的全称是Quantile-Quantile plot图&#xff0c;主要用于去判断某一系列的值是否符合正态分布&#xff0c;横坐标是理论值&#xff0c;纵坐标是实际值&#xff0c;当纵坐标和横坐标的坐标值相同的时候&#xf…

如何关掉 PC QQ 烦人的 QQ 频道

QQ 频道被 QQ 强制捆绑, 很多人用不到, 而且还不能完全免打扰, 点击消息的时候, QQ 频道就会跳出来, 非常的烦人. 步骤 关闭掉 QQ. 然后找到 QQ 频道的本体目录: 使用 %LOCALAPPDATA%\Tencent 可以快速跳转到这里 打开文件夹属性, 转到 “安全” 选项卡, 然后点击 “高级” …

python 给QQ好友定时发送消息

python 给QQ好友定时发送消息 前言初衷代码效果后记 前言 在小编的上一篇python文章中提到了关于微信或者QQ的消息“轰炸”&#xff08;其实我是想你也去看看&#xff0c;23333 [狗头保命]&#xff09;&#xff0c;那是简单版本&#xff0c;今天我要讲的是&#xff0c;发送消息…

QQ再次被大规模盗号

我是卢松松&#xff0c;点点上面的头像&#xff0c;欢迎关注我哦&#xff01; QQ被大规模盗号已经不是一次两次了&#xff0c;感觉腾讯好像没有太好的解决办法。 昨天(周日)QQ又出下了大规模盗号情况&#xff1a;大量用户反馈称遇到了自己或是身边的朋友、家人、同事等被盗号…

SpringBoot整合定时任务和邮件发送(邮箱 信息轰炸 整蛊)

SpringBoot整合定时任务和邮件发送&#xff08;邮箱 信息轰炸 整蛊&#xff09; 目录 SpringBoot整合定时任务和邮件发送&#xff08;邮箱 信息轰炸 整蛊&#xff09;1.概述2.最佳实践2.1创建项目引入依赖(mail)2.2 修改yml配置文件2.3 启动类添加EnableScheduling注解2.4 执行…

让对方qq崩溃的代码2020_为什么都瞧不起QQ邮箱?

“我真他妈受够公路商店了&#xff01;” 某部门的某大哥抱怨自己一天到晚被办公室的烟熏的眼睛都睁不开&#xff0c;无论如何都要跳槽到一个起码能供应自然氧气的公司。 但当我从背后偷偷瞄了一眼他的电脑&#xff0c;发现他认认真真的用QQ邮箱起草了一份简历&#xff0c;我就…

QQ防撤回

QQ防撤回 版本截图 收集信息 这一步非常关键,因为在分析时,思路如果不对,基本上是分析不出来的,这里我们从敏感字符串开始。先搜一搜撤销的英文单词 如图知道了好几个单词,锁定关键字一个一个使用Notepad++的搜索功能,再文件中搜索。 查看搜索结果,发现又两个和消…

揭秘:QQ盗号背后的产业链,惊人的暴利!

最好的欺骗手段&#xff0c;莫过于让其信任的人、事、物蒙蔽判断&#xff0c;待到入圈之时&#xff0c;便是案板上的肉。 你所看到的、想到的、听到的、闻到的、摸到的&#xff0c;是否是别人有意让你看到、听到、闻到、摸到、想到&#xff1f; 人最大的错误就是看所看、想所…

QQ群怎么快速封群,如何举报骗子QQ群可以使之封群?

QQ群是个开放式的交流平台&#xff0c;充斥着各色各样的人和行业&#xff0c;不少人都被一些表面光鲜亮丽&#xff0c;背地乌烟瘴气的QQ群吸引过&#xff0c;直到出问题的时候才知道为时已晚。 以目前腾讯的审核力度来看&#xff0c;正常举报&#xff0c;封群是极其困难的&…

不再害怕打字慢(python信息轰炸)

不知道各位小伙伴有没有这样的烦恼&#xff1a;在和自己的朋友聊天的时候&#xff0c;自己无论是使用九键还是26键&#xff0c;都没有他们打字快&#xff1b;双方进行信息轰炸的时候&#xff0c;更没有他们快了。下面这篇文章将会解决这个烦恼。话不多说&#xff0c;直接上才艺…

【用python写一个简易的消息轰炸代码】

用python写一个简易的消息轰炸代码 前言一、思路讲解二、使用步骤1.引入库2.完整代码 总结 前言 有没有在qq&#xff0c;微信想用一句话不停怼一个人&#xff0c;这篇文章教你在回车能发送消息的一系列软件中&#xff0c;快速多次发送你想发的话。 一、思路讲解 1.定位输入框…

qq消息连发脚本

这是我闲的没事&#xff0c;在网上学的&#xff0c;虽然功能比较单一&#xff0c;只能重复发一个信息&#xff0c;但闲得无聊可以抖一抖好你的基友【doge】 代码如下&#xff1a; #include<iostream> #include<windows.h> using namespace std;int main() {int t…

基于python的消息轰炸

首先我们需要安装pyautogui调用库 在命令提示符中输入pip install pyautogui 然后我们需要得到需要轰炸的对话框的坐标 在pycharm中输入以下代码 import pyautogui# 导入库 print(pyautogui.position()) # 显示鼠标的x,y位置 打开对话框 运行 鼠标放在要轰炸的对话框上 记…

屏幕控制实现消息发送以及轰炸

最近突然想做一个QQ消息发送实现&#xff0c;查找了很多资料找不到相应的库&#xff0c;最后在一个博客中看到屏幕控制。 下面就是通过屏幕控制实现的消息发送即轰炸 import pyautogui # 鼠标 import pyperclip # 粘贴板 import time # 延时# words input(请输入轰炸的内容…

【修改】对“C语言实现轰炸代码”进行修改和完善

场景&#xff1a; 使用C语言实现“轰炸”效果&#xff0c;就是多条重复表情或信息的发送&#xff1b;使用场景是在QQ上面。 问题描述 1.不兼容&#xff0c;对于VS2022或者其他VS编译器无法实现效果。 2.代码能正常运行但无法弹出窗口进行发信息。 原因分析&#xff1a; 1.不…

Python实现消息轰炸效果,从入门到进阶

本期小编给大家带来的内容是&#xff1a;使用Python实现消息轰炸效果&#xff0c;消息轰炸的用途这里小编就不再赘述&#xff0c;老样子直接进入正题&#xff01; 要实现消息轰炸效果&#xff0c;首先要借助Python第三方库-pyautogui&#xff0c;原理很简单就是识别光标位置&am…

VBS QQ微信消息轰炸

今天给大家介绍一下&#xff0c;简单的微信QQ消息轰炸脚本&#xff0c;会使用电脑即可&#xff1b;慎用&#xff0c;后果自负&#xff01;使用方法如下&#xff1a; 一、在电脑上新建一个文本文档&#xff0c;命名随意。 二、将以下代码复制到文本文档中并保存&#xff0c;代码…

第四天 游戏策划学习

摸鱼了太久&#xff0c;今天来学习下回合制战斗的乱敏机制的作用和本质 首先什么是乱敏&#xff1a; 就是指敌我双方如果在一个速度区间内&#xff0c;并不是按照速度的绝对高低来决定出手顺序&#xff0c;而且有一定的几率&#xff0c;速度慢的角色会比速度快的角色先出手。…

游戏数值策划属性篇(一):关于属性设计的几点思考

摘要: 本文转载自: http://www.cocoachina.com/game/20150906/13333.html(只作转载, 不代表本站和博主同意文中观点或证实文中信息) “属性”从何而来&#xff0c;终归何处&#xff1f;在整个游戏设计中笔者围绕着这个问题展开思考.....  一、关于属性设计思想的几点思考  …