yaml语法+yaml配置文件

yaml语法

k:(空格)v => 表示一对键值对空格必须有

yaml拥有严格的空格缩进格式控制,以空格的缩进来控制层级关系;只要是左对齐的一列数据,都是同一个层级的

spring:thymeleaf:cache: true# 检查模板是否存在,然后再呈现check-template: true

1. 双引号和单引号

“”:双引号;不会转义字符串里面的特殊字符;特殊字符会作为本身想表示的意思
‘’:单引号;会转义特殊字符,特殊字符最终只是一个普通的字符串数据

yaml:test:doubleQuota: "张三\n李四" # 张三+换行+李四singleQuota: '张三\n李四' # 张三\n李四

2. 对象和map

yaml:test:friend1:lastName: zhangsan # 换行写法age: 26 friend2: { lastName: 李四,age: 20 } # 行内写法maps: {k1: v1,k2: 12} # 注意key:之后的空格!!

3. list

写法一

    yaml:test: lists:- shijiazhuang- beijing- hengshui- xianyang

只能通过@ConfigurationProperties的方式注入

写法二

    yaml:test: list2: [red,green,yellow]

只能通过@ConfigurationProperties的方式注入

写法三

    yaml:test: list3: beiJing,shangHai,guangZhou,shenZhen

@Value也可以注入

xml配置文件的缺点

  1. 每一个依赖都有可能产生自己独有的xml依赖文件,当我们引入的包数量多了之后,xml配置文件的数量会变得非常多,不利于维护
  2. 每一种xml都有自己独立的xml命名空间,不允许使用用户自定义的标签
  3. xml的格式繁琐,需要定义开始和结束标签,中间才能写值在这里插入图片描述

yaml配置文件

*.properties或者*.yaml或者*.yml

克服了上述缺点

yaml以数据为中心,比json,xml更适合做配置文件

配置文件的值依赖注入到bean对象中

1. @Value形式

@Component
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
@ToString
public class YamlTestProperties {@Value("${yaml.test.doubleQuota}")private String doubleQuota;@Value("${yaml.test.singleQuota}")private String singleQuota;@Value("${yaml.friend1.lastName}")private String lastName1;@Value("${yaml.friend1.age}")private String age1;@Value("${yaml.friend2.lastName}")private String lastName2;@Value("${yaml.friend2.age}")private String age2;//    @Value("${yaml.list1}")
//    private String list1;//    @Value("${yaml.list2}")
//    private String list2;@Value("${yaml.list3}")private String[] list3;}
yaml:test:doubleQuota: "张三\n李四"singleQuota: '张三\n李四'friend1:lastName: zhangsan # 两个退格?age: 26 # 两个退格?friend2: { lastName: 李四,age: 20 }list1: # 只能通过@ConfigurationProperties的方式注入- cat- dog- piglist2: [red,green,yellow] # 只能通过@ConfigurationProperties的方式注入list3: beiJing,shangHai,guangZhou,shenZhen

只能一个一个注入,而且部分格式的list不支持

2. @ConfigurationProperties注入

@Component
@ConfigurationProperties(prefix = "zxk")
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
public class Zxk {private String lastName;private Integer age;private Boolean boss;private Date birth;private Map<String,Object> maps;private List<Object> lists;private Cat cat;@Overridepublic String toString() {return "Zxk{" +"lastName='" + lastName + '\'' +", age=" + age +", boss=" + boss +", birth=" + birth +", maps=" + maps +", lists=" + lists +", cat=" + cat +'}';}
}
zxk:lastName: zxk@qq.comage: 18boss: falsebirth: 1999/12/28 # SpringBoot默认的时间格式,想要修改必须新增实现Converter接口的格式转换器类maps: {k1: v1,k2: 12} # 注意key:之后的空格!!lists:- shijiazhuang- beijing- hengshui- xianyangcat:name: jidanage: 0.5

@Value获取值和@ConfigurationProperties获取值比较

在这里插入图片描述

配置文件注入值数据校验

 <!--引入校验,@Email,@Validated等--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId>
</dependency>
@Component
@ConfigurationProperties(prefix = "zxk")
@Validated
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
public class Zxk {//lastName必须是邮箱格式@Emailprivate String lastName;private Integer age;private Boolean boss;private Date birth;private Map<String,Object> maps;private List<Object> lists;private Cat cat;@Overridepublic String toString() {return "Zxk{" +"lastName='" + lastName + '\'' +", age=" + age +", boss=" + boss +", birth=" + birth +", maps=" + maps +", lists=" + lists +", cat=" + cat +'}';}
}

@PropertySource

如果想为某一个@ConfigurationProperties的bean组件单独创建yaml文件,不想写到application.yaml中,那么需要指定是resources路径下的哪一个yaml文件,此时就需要用到@PropertySource

@Component
@ConfigurationProperties(prefix = "zxk")
@Validated
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
@PropertySource(value = {"classpath:zxk.properties"})
public class Zxk {//lastName必须是邮箱格式@Emailprivate String lastName;private Integer age;private Boolean boss;private Date birth;private Map<String,Object> maps;private List<Object> lists;private Cat cat;@Overridepublic String toString() {return "Zxk{" +"lastName='" + lastName + '\'' +", age=" + age +", boss=" + boss +", birth=" + birth +", maps=" + maps +", lists=" + lists +", cat=" + cat +'}';}
}

@ImportResource

导入Spring的xml配置文件,让配置文件里面的内容生效

一般不用这个注解,我们完全可以用@Configuration注解+@Bean注解自定义配置类

yaml配置文件占位符

${random.value}、${random.int}、${random.long}
${random.int(10)}、${random.int[1024,65536]}
person.last‐name=张三${random.uuid}
person.age=${random.int}
person.birth=2017/12/15
person.boss=false
person.maps.k1=v1
person.maps.k2=14
person.lists=a,b,c
person.dog.name=${person.hello:hello}_dog # hello是默认值
person.dog.age=15

:后可以指定默认值

多配置文件

指定后缀

resources下可以同时存在多个application.yaml文件,他们的区别在于后缀不同

application.yaml(任何环境都存在且相同的配置)
application-dev.yaml(开发环境配置
application-prd.yaml(生存环境配置

spring:application:name: project_nameprofiles:active: '@activeProfile@'

这里的@activeProfile@是配置在pom文件的profile标签内的

    <profiles><profile><id>dev</id><activation><activeByDefault>true</activeByDefault></activation><properties><activeProfile>dev</activeProfile></properties></profile><profile><id>test</id><properties><activeProfile>test</activeProfile></properties></profile><profile><id>pretest</id><properties><activeProfile>pretest</activeProfile></properties></profile><profile><id>prd</id><properties><activeProfile>prd</activeProfile></properties></profile></profiles>

多文档快


# 默认配置
server:port: 9090
spring:profiles:active: '@activeProfile@'thymeleaf:cache: true# 检查模板是否存在,然后再呈现check-template: true# 检查模板位置是否正确(默认值 : true )check-template-location: true#Content-Type 的值(默认值: text/html )content-type: text/html# 开启 MVC Thymeleaf 视图解析(默认值: true )enabled: true# 模板编码encoding: UTF-8# 要被排除在解析之外的视图名称列表,⽤逗号分隔excluded-view-names:# 要运⽤于模板之上的模板模式。另⻅ StandardTemplate-ModeHandlers( 默认值: HTML5)mode: HTML5# 在构建 URL 时添加到视图名称前的前缀(默认值: classpath: /templates/ )prefix: classpath:/templates/# 在构建 URL 时添加到视图名称后的后缀(默认值: : html )suffix: .htmlyaml:test:doubleQuota: "张三\n李四"singleQuota: '张三\n李四'friend1:lastName: zhangsan # 两个退格?age: 26 # 两个退格?friend2: { lastName: 李四,age: 20 }list1: # 只能通过@ConfigurationProperties的方式注入- cat- dog- piglist2: [ red,green,yellow ] # 只能通过@ConfigurationProperties的方式注入list3: beiJing,shangHai,guangZhou,shenZhenzxk:lastName: zxk@qq.comage: 18boss: falsebirth: 1999/12/28 # SpringBoot默认的时间格式,想要修改必须新增实现Converter接口的格式转换器类maps: { k1: v1,k2: 12 } # 注意key:之后的空格!!lists:- shijiazhuang- beijing- hengshui- xianyangcat:name: jidanage: 0.5# 开发配置
---
server:port: 9091
spring:config:activate:on-profile: dev# 测试配置
---
server:port: 9092
spring:config:activate:on-profile: test# 生产配置
---
server:port: 9093
spring:config:activate:on-profile: prd

1、激活指定profile

1、 在配置文件中指定 spring.profiles.active=dev
2、命令行:

java -jar spring-boot-02-config-0.0.1-SNAPSHOT.jar --spring.profiles.active=dev;
可以直接在测试的时候,配置传入命令行参数

3、虚拟机参数;

-Dspring.profiles.active=dev

配置文件加载位置

springboot 启动会扫描以下位置的application.properties或者application.yml文件作为Spring boot的默认配置文件
–file:./config/
–file:./
–classpath:/config/
–classpath:/
优先级由高到底,高优先级的配置会覆盖低优先级的配置;
SpringBoot会从这四个位置全部加载主配置文件;互补配置;
在-classpath:/的application.properties.中加入
server.servlet.context-path=/boot3访问根目录

外部配置加载顺序

配置加载顺序
SpringBoot也可以从以下位置加载配置; 优先级从高到低;高优先级的配置覆盖低优先级的配置,所有的配置会形成互补配置

1.命令行参数

所有的配置都可以在命令行上进行指定
java -jar spring-boot-02-config-02-0.0.1-SNAPSHOT.jar --server.port=8087 --server.context-path=/abc
java -jar spring-boot-02-config-02-0.0.1-SNAPSHOT.jar --spring.config.location=C:/appliction.properties
多个配置用空格分开; --配置项=值

2.来自java:comp/env的JNDI属性

3.Java系统属性(System.getProperties())

4.操作系统环境变量

5.RandomValuePropertySource配置的random.*属性值

由jar包外向jar包内进行寻找;
优先加载带profile

6.jar包外部的application-{profile}.properties或application.yml(带spring.profile)配置文件

7.jar包内部的application-{profile}.properties或application.yml(带spring.profile)配置文件

再来加载不带profile

8.jar包外部的application.properties或application.yml(不带spring.profile)配置文件

9.jar包内部的application.properties或application.yml(不带spring.profile)配置文件

10.@Configuration注解类上的@PropertySource

11.通过SpringApplication.setDefaultProperties指定的默认属性

所有支持的配置加载来源;
资料参考:
24. Externalized Configuration

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【初阶数据结构题目】18.设计循环队列

设计循环队列 点击链接答题 思路&#xff1a; 循环队列&#xff0c;空间固定。 这里我们可以用数组来实现循环队列。 如何判断队列是否为满&#xff1f; 多申请一块空间 (rear1)%(k1) front 如何判断队列是否为空&#xff1f; rear front 代码&#xff1a; //定义循环队列的…

【开端】通过Java 过滤器灵活配置URL访问权限,并返回403

一、绪论 在JAVA项目系统中&#xff0c;后端给前端提供接口。但是在某些场景我们需要临时控制接口是否能被访问。或关闭某一接口的访问权限。 比如某一接口被攻击了或者某一接口存在漏洞&#xff0c;在系统不关闭的情况下&#xff0c;如何控制系统的访问权限。 二、控制接口访…

俄组织Fighting Ursa利用虚假汽车销售广告传播HeadLace后门

最近&#xff0c;Palo Alto Networks的科研人员揭露了有一个与俄罗斯有关联的威胁行动者——Fighting Ursa&#xff08;亦称APT28、Fancy Bear或Sofacy&#xff09;。该组织通过散布虚假的汽车销售广告&#xff0c;特别是针对外交官群体&#xff0c;散播名为HeadLace的后门恶意…

概率论原理精解【9】

文章目录 集类拓扑空间基 参考文献 集类 C是一个集类&#xff08;以G的某些子集为元素的集合称为G的集类&#xff09;。 A i ∈ C , ∩ i 1 n A i ∈ C , 此为有限交封闭 C 所得集类 C ∩ f A_i \in C,\cap_{i1}^nA_i \in C,此为有限交封闭C所得集类C_{\cap f} Ai​∈C,∩i1n…

windows和office微软官方免费激活教程

微软提供了windows系统和office的官方免费激活&#xff0c;其实不用去买什么激活码&#xff0c;官方提供了激活方式&#xff0c;完全免费。目前测试没发现什么问题&#xff0c;windows还支持永久激活&#xff0c;比一些乱七八糟的kms激活工具还省心。 github地址&#xff1a;Gi…

Xshell8最新版体验(业界最强大的SSH连接工具)

Xshell 是一款强大的 SSH 客户端&#xff0c;广泛用于远程管理和连接服务器。 一、主要特性 多标签界面&#xff1a; 支持在一个窗口中打开多个会话&#xff0c;每个会话以标签形式显示&#xff0c;方便用户在不同会话之间快速切换。 会话管理&#xff1a; 提供强大的会话管理…

Ubuntu安装MySQL5.7 + Apache + PHP + 禅道 保姆及教程

目录 开始安装MySQL 5.7 1、获取安装包 2、解压到指定位置 安装MySQL 启动MySQL 进入到MySQL进行测试 设置允许所有IP可以连接 配置允许远程连接 和 开启 gtid 和 binlog 日志&#xff08;这一步如果不需要可以不操作 如果只需要配置允许远程连接只添加bind-address 0…

Google Mock 和 Google Test编写单元测试入门(环境配置、简单执行)

文章目录 环境的配置方法1&#xff1a;从源代码构建第一步&#xff1a;克隆库的源代码第二步&#xff1a;构建库 方法 2&#xff1a;使用 CMake 的 FetchContent示例 CMakeLists.txt 项目的创建项目结构CMakeLists.txt (根目录)main.cpp (示例程序)tests/CMakeLists.txt (测试部…

Spring-Kafka确认机制报错:No Acknowledgment available as an argument

问题出现 在spring boot集成kafka时报错&#xff0c;报错信息&#xff1a; No Acknowledgment available as an argument, the listener container must have a MANUAL AckMode to populate the Acknowledgment.翻译&#xff1a; Acknowledgment 参数不可用&#xff0c;监听…

本地部署MySQL图形化管理工具phpMyAdmin结合内网穿透远程访问

文章目录 前言1. 安装MySQL2. 安装phpMyAdmin3. 修改User表4. 本地测试连接MySQL5. 安装cpolar内网穿透6. 配置MySQL公网访问地址7. 配置MySQL固定公网地址8. 配置phpMyAdmin公网地址9. 配置phpmyadmin固定公网地址 前言 本文主要介绍如何在群晖NAS安装MySQL与数据库管理软件p…

TCP 通信全流程分析:从连接建立到数据传输的深度探索

目录 一、TCP报头 二、三次握手 三、数据传输 四、四次挥手 本文通过一次TCP通信过程的分析来学习TCP协议 一、TCP报头 如图是一份TCP报文的报头&#xff0c;标准报头是20个字节&#xff0c;还可带有选项报头&#xff0c;也就是TCP报头的最小长度是20字节。以下是对报头的各…

千里江山图,自动化成诗:Expect脚本详解——从入门到进阶的自动化利器

目录 引言 Expect脚本基础 什么是Expect 基本语法 进阶应用 错误处理 正则表达式 并发处理 使用Shell脚本管理多个Expect脚本 在Expect脚本内部模拟并发 脚本复用与模块化 总结 引言 在自动化运维和测试领域&#xff0c;Expect脚本无疑是一把强大的利器。它以其灵…

鸿蒙Image组件设置长按手势回调事件

Image组件默认是可拖拽的&#xff0c;给Image组件设置draggable为false&#xff0c;即可成功触发长按事件:

基于Hadoop的北京市二手房价数据分析与可视化

文章目录 有需要本项目的代码或文档以及全部资源&#xff0c;或者部署调试可以私信博主项目介绍总结每文 有需要本项目的代码或文档以及全部资源&#xff0c;或者部署调试可以私信博主 项目介绍 随着中国经济的快速发展和城市化进程的加速&#xff0c;房地产市场已成为国民经…

难题:反转链表

定义一个函数&#xff0c;输入一个链表的头结点&#xff0c;反转该链表并输出反转后链表的头结点。 思考题&#xff1a; 请同时实现迭代版本和递归版本。 数据范围 链表长度 [0,30]。 样例 输入:1->2->3->4->5->NULL输出:5->4->3->2->1->N…

sgetrf M N is 103040 时报错,这是个bug么 lapack and Openblas the same,修复备忘

1,现象 MN103040时&#xff0c;调用 sgetrf_ 时&#xff0c;无论是 LAPACK 还是 OpenBLAS&#xff0c;都出错&#xff1a; openblas&#xff1a; lapack&#xff1a; 2, 复现代码 出现问题的应该是由于M和N相对数字太大&#xff0c;乘积超出32bit整数的表达范围&#xff0c;…

vulnhub靶机tomato记录

https://www.vulnhub.com/entry/tomato-1,557/ 过程 用nmap对目标主机做全端口扫描&#xff0c;dirb做目录扫描&#xff0c;结果如下&#xff1a; 8888端口开放一个web服务&#xff0c;存在Basic认证&#xff0c;试了爆破无果&#xff0c;sun-answerbook是一个在线文档系统&am…

门店收银系统源码+同城即时零售多商户入驻商城源码

一、我们为什么要开发这个系统&#xff1f; 1. 商户经营现状 “腰尾部”商户&#xff0c;无小程序运营能力&#xff1b;自营私域商城流量渠道单一&#xff1b;无法和线下收银台打通&#xff0c;库存不同步&#xff0c;商品不同步&#xff0c;订单不同步&#xff1b; 2.平台服…

MongoDB学习记录

1、初识Mongo 概述&#xff1a;与关系型数据库不同&#xff0c;MongoDB 的数据以类似于 JSON 格式的二进制文档存储&#xff0c;通常称这种格式为Bson&#xff0c;Bson不仅支持JSON中已有的数据类型&#xff0c;还增加了一些额外的数据类型&#xff0c;例如日期和二进制数据&a…

python爬虫学习记录-请求模块urllib3

&#xff08;文章内容仅作学习交流使用&#xff09; urllib3是一个功能强大、条理清晰&#xff0c;用于HTTP客户端的第三方模块 urllib3-发送网络请求 使用urllib3发送网络请求时&#xff0c;需要先创建PoolManager对象&#xff0c;并使用该对象的request方法发送请求&#…