IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> SpringBoot学习---yaml配置 -> 正文阅读

[Java知识库]SpringBoot学习---yaml配置

一.什么是yaml

百度百科:

YAML(/?j?m?l/,尾音类似camel骆驼)是一个可读性高,用来表达数据序列化的格式。YAML参考了其他多种语言,包括:C语言、Python、Perl,并从XML、电子邮件的数据格式(RFC 2822)中获得灵感。Clark Evans在2001年首次发表了这种语言,另外Ingy d?t Net与Oren Ben-Kiki也是这语言的共同设计者。当前已经有数种编程语言或脚本语言支持(或者说解析)这种语言。
YAML是"YAML Ain’t a Markup Language"(YAML不是一种标记语言)的递归缩写。在开发的这种语言时,YAML 的意思其实是:“Yet Another Markup Language”(仍是一种标记语言),但为了强调这种语言以数据做为中心,而不是以标记语言为重点,而用反向缩略语重命名。

  • yam语言以数据作为中心,而不是以标记语言为重点
  • yaml特别适合用来表达或编辑数据结构、各种配置文件、倾印调试内容、文件大纲
  • YAML 的配置文件后缀为 .yml,如:runoob.yml

二.yaml基础语法与数据类型

1.yaml基础语法

  • 大小写敏感
  • 使用缩进表示层级关系
  • 缩进不允许使用tab,只允许空格
  • 缩进的空格数不重要,只要相同层级的元素左对齐即可
  • '#'表示注释

传统xml配置:


<server>
    <port>8081<port>
</server>

yaml配置:

server:
	port: 8080

2.数据类型

YAML 支持以下几种数据类型:

  • 对象:键值对的集合,又称为映射(mapping)/ 哈希(hashes) / 字典(dictionary)
  • 数组:一组按次序排列的值,又称为序列(sequence) / 列表(list)
  • 纯量(scalars):单个的、不可再分的值
(1) 对象类型

对象键值对使用冒号结构表示 key: value,冒号后面要加一个空格。
在这里插入图片描述

行内写法:
在这里插入图片描述

缩进表示层级关系,例如获取管理员Id:User.admin.id
在这里插入图片描述

注意:

  • 冒号后面至少要有一个空格!

在这里插入图片描述

  • “ ” 双引号,不会转义字符串里面的特殊字符 , 特殊字符会作为本身想表示的意思。

在这里插入图片描述

  • ’ ’ 单引号,会转义特殊字符 , 特殊字符最终会变成和普通字符一样输出。

在这里插入图片描述

较为复杂的对象格式,可以使用问号加一个空格代表一个复杂的 key,配合一个冒号加一个空格代表一个 value:
在这里插入图片描述
上面的代码即对象的属性是一个数组 [arrag0,arrag1],对应的值也是一个数组 [value1,value2]

(2) 数组类型

- 开头的行表示构成一个数组,单独一列表示一个数组元素:
在这里插入图片描述
表示一个数组:
在这里插入图片描述
表示数组中的一个元素:
在这里插入图片描述

行内表示:
在这里插入图片描述
多维数组表示:
在这里插入图片描述
行内表示:
在这里插入图片描述
一个相对复杂的例子:
在这里插入图片描述
行内表示:
在这里插入图片描述

(3) 复合结构

数组和对象可以构成复合结构,例:
在这里插入图片描述
转换为 json 为:

{ 
  languages: [ 'Ruby', 'Perl', 'Python'],
  websites: {
    YAML: 'yaml.org',
    Ruby: 'ruby-lang.org',
    Python: 'python.org',
    Perl: 'use.perl.org' 
  } 
}
(4) 纯量类型

纯量是最基本的,不可再分的值,包括:字符串,布尔值,整数,浮点数,Null ,时间,日期。

在这里插入图片描述

(5) 引用
  • & 用来建立锚点(defaults)
  • << 表示合并到当前数据
  • * 用来引用锚点

在这里插入图片描述
相当于:
在这里插入图片描述

三.yaml注入配置文件

1.yaml配置注入到实体类

yaml文件更强大的地方在于,他可以给我们的实体类直接注入匹配值!
以前实体类注入(通过Value(“值”)进行实体类初始化操作):
创建一个实体类User.Java
在这里插入图片描述
备注(不要忘了导入lombok的依赖):
在这里插入图片描述

测试类:
在这里插入图片描述
运行效果:
在这里插入图片描述

我们可以通过yaml对整个实体进行初始化操作:
在resources文件下创建一个application.yaml
在这里插入图片描述
在application.yam中添加如下对象
在这里插入图片描述
导入依赖
在这里插入图片描述
在实体类中添加@ConfigurationProperties(prefix = “user”)
在这里插入图片描述
备注:上面name初始化为"李四",age初始化为28

运行测试类:
在这里插入图片描述
从上面的运行结果发现name注入的值为Administrator?what?,这不是我的电脑用户名嘛,网上查了一下说user.name可能是系统属性,哈哈好吧,这里就把name修改为userName(或者将@ConfigurationProperties的值的user修改一下)
在这里插入图片描述
在这里插入图片描述
当然测试类也要修改一下:
在这里插入图片描述

然后再次运行(从上面的操作来看@value和yaml注入,同时使用的情况下,最后初始化的值为yaml配置文件):
在这里插入图片描述

2.yaml加载指定的配置文件

  • @configurationProperties:默认从全局配置文件中获取值;
  • @PropertySource :加载指定的配置文件;

在上面通过yaml进行实体类注入的时候使用了@configurationPropertiesm,这个标签表示默认从全局配置文件(全局文件:xxx.properties和xxx.yaml)中获取值,除此之外还有一个@PropertySource表示加载指定的配置文件;

实例:
新增一个people.properties文件
在这里插入图片描述

在这里插入图片描述

在实体类中使用@PropertySource标签,然后通过@Value("${name}")单个绑定properties文件中的属性:
在这里插入图片描述

备注:将@ConfigurationProperties(prefix = “user”)注释掉

运行测试类:
在这里插入图片描述

注意:properties配置文件在写中文的时候,会有乱码 , 我们需要去IDEA中设置编码格式为UTF-8;
File->Settings…
在这里插入图片描述
在FileEncodings中红框框处修改编码为UTF-8
在这里插入图片描述
再次运行(xxx.propertis中字符串不需要加""):
在这里插入图片描述

  • @configurationProperties与@PropertySource

在这里插入图片描述

  • yaml文件暂不支持使用@PropertySource("")注解,但是支持@ConfigurationProperties(prefix = “”)
  • @ConfigurationProperties只需要写一次即可 , @Value则需要每个字段都添加
  • 松散绑定: yaml中写 last-name, 可以映射为Java类中驼峰命名的 lastName。’ - ’ 后第一个字母默认为大写
  • JSR303数据校验: 给字段加一层过滤器验证,保证数据的合法性
  • 复杂类型封装,yml中可以封装对象 , 使用value就不支持

四.JSR303数据校验

Springboot中可以用@validated来校验数据,如果数据异常则会统一抛出异常,方便异常中心统一处理。我们这里来写个注解让我们的name只能支持Email格式;

  • 导入依赖:

在这里插入图片描述

  • 新建一个EmailInfo类:

在这里插入图片描述
在application.yaml中给emailPath注入参数:
在这里插入图片描述

  • 测试类:

在这里插入图片描述
运行效果:
在这里插入图片描述

修改application.yaml中emailPath的格式为邮箱格式:
在这里插入图片描述
再次运行:
在这里插入图片描述
使用数据校验,可以保证数据的正确性,常见的校验参数:


@NotNull(message="名字不能为空")
private String userName;
@Max(value=120,message="年龄最大不能查过120")
private int age;
@Email(message="邮箱格式错误")
private String email;

空检查
@Null       验证对象是否为null
@NotNull    验证对象是否不为null, 无法查检长度为0的字符串
@NotBlank   检查约束字符串是不是Null还有被Trim的长度是否大于0,只对字符串,且会去掉前后空格.
@NotEmpty   检查约束元素是否为NULL或者是EMPTY.
    
Booelan检查
@AssertTrue     验证 Boolean 对象是否为 true  
@AssertFalse    验证 Boolean 对象是否为 false  
    
长度检查
@Size(min=, max=) 验证对象(Array,Collection,Map,String)长度是否在给定的范围之内  
@Length(min=, max=) string is between min and max included.

日期检查
@Past       验证 Date 和 Calendar 对象是否在当前时间之前  
@Future     验证 Date 和 Calendar 对象是否在当前时间之后  
@Pattern    验证 String 对象是否符合正则表达式的规则

.......等等
除此以外,我们还可以自定义一些数据校验规则

五.多环境切换

我们在主配置文件编写的时候,文件名可以是 application-{profile}.properties/yaml ,
用来指定多个环境版本;

例如:
properties:

  • application-test.properties 代表测试环境配置
  • application-dev.properties 代表开发环境配置
  • application-prod.properties正式环境配置

yaml:

  • application-test.yaml 代表测试环境配置
  • application-dev.yaml 代表开发环境配置
  • application-prod.yaml 正式环境配置

1.properties多环境切换

但是Springboot并不会直接启动这些配置文件,它默认使用application.properties主配置文件;
我们需要通过一个配置来选择需要激活的环境:

spring.profiles.active=dev:使用application-dev.properties配置环境

创建 application-test.properties和application-dev.properties
在这里插入图片描述
在application.properties中设置端口为8088
在这里插入图片描述
application-test.properties中设置端口为8090
在这里插入图片描述

application-dev.properties中设置端口为8089
在这里插入图片描述
备注:在创建项目的时候我已经导入Web依赖,没有导入需要手动导入,如下:
在这里插入图片描述
运行项目:
在这里插入图片描述
在application.properties中新增**spring.profiles.active=dev**
在这里插入图片描述
运行效果:
在这里插入图片描述

2.yml多环境切换

创建一个application.yaml,在该文件下加入如下配置:

server:
  port: 8081
#选择要激活那个环境块
spring:
  profiles:
    active: prod

---
server:
  port: 8083
spring:
  profiles: dev #配置环境的名称


---

server:
  port: 8084
spring:
  profiles: prod  #配置环境的名称

将application.properties中的配置注释掉:
在这里插入图片描述
运行效果:
在这里插入图片描述

和properties配置文件中一样,但是使用yml去实现不需要创建多个配置文件,更加方便了,如果yml和properties同时都配置了端口,并且没有激活其他环境 , 默认会使用properties配置文件的。

3.配置文件加载位置

外部加载配置文件的方式十分多,我们选择最常用的即可,在开发的资源文件中进行配置!

官方外部配置文件说明参考文档中四种目录:

  • file:./config/
  • file:./
  • classpath:/config/
  • classpath:/

springboot 启动会扫描以下位置的application.properties或者application.yml文件作为Spring boot的默认配置文件:
优先级由高到底,高优先级的配置会覆盖低优先级的配置:

  • 优先级1:项目路径下的config文件夹配置文件
  • 优先级2:项目路径下配置文件
  • 优先级3:资源路径下的config文件夹配置文件
  • 优先级4:资源路径下配置文件

新建一个SpringBoot项目来测试一下:
在这里插入图片描述
在这里插入图片描述

在项目文件下创建一个application.yaml(配置端口为9002),然后再创建一个config文件在该文件下再创建一个application.yaml(配置端口为9001)。
在这里插入图片描述
然后在项目src下的资源文件(resources)下创建application.yaml(设置端口为9004)和config目录下application.yam(设置端口为9003)

加载web依赖:
在这里插入图片描述

运行项目:
(执行9001端口先执行的是项目下config文件下的application.yaml配置,然后注释掉,再次运行)
在这里插入图片描述

运行项目:
(执行9002端口,执行的是项目下的application.yaml配置,然后注释掉,再次运行)
在这里插入图片描述
运行项目:
(执行9003端口,执行的是项目下src下的资源文件(resources)下config文件下的application.yaml配置,然后注释掉,再次运行)
在这里插入图片描述

运行项目:
在这里插入图片描述

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-03-15 22:18:55  更:2022-03-15 22:22:09 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 9:20:35-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码