yaml配置注入(代码片段)

zpkang zpkang     2022-12-03     741

关键词:

yaml配置注入

yaml, 也有人写为yml, 读音(鸭买哦) 官方格式为yaml

YAML(/?j?m?l/,尾音类似camel骆驼)是一个可读性高,用来表达数据序列化的格式。YAML参考了其他多种语言,包括:C语言、Python、Perl,并从XML、电子邮件的数据格式(RFC 2822)中获得灵感。Clark Evans在2001年首次发表了这种语言,另外Ingy d?t Net与Oren Ben-Kiki也是这语言的共同设计者。当前已经有数种编程语言或脚本语言支持(或者说解析)这种语言。这种语言以数据作为中心,而不是以标记语言为重点!

在springboot中, 官方推荐使用yaml格式的配置文件来取代properties文件进行配置

  • properties文件格式: key=value

  • yml文件格式: key:空格value

  • 他们的注释都是 #

配置文件可以用来修改springboot中已经配置好的默认值

和xml对比, 例如: (修改服务器端口号)

xml:

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

yaml:

server:
  prot: 8080

可见语法比xml更加简洁, 更加直观

yaml基础语法

语法要求非常严格, 尤其是缩进, 规则如下:

  1. 空格不能省略
  2. 以缩进来控制层级关系,只要是左边对齐的一列数据都是同一个层级的。
  3. 属性和值的大小写都是十分敏感的。

字面量: 普通值(数组, 布尔, 字符串)

字面量可以直接写而不需要加双引号

K: V

注意:

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

    比如 :name: "123 456" 输出 :123 换行 456

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

    比如 :name: ‘123 456’ 输出 :123 456

对象, Map类型 (键值对)

对象和Map的格式有如下两种方式, 写法一致

o: 
    k1: v1
    k2: v2

第一行o是对象名或者map的变量名, 如果下面的k1, k2想和对象或者map建立关系, 必须有缩进

例如: student对象

student:
    name: 张三
    age: 3

集合: 例如Map map = new HashMap();

map:
	k1: v1
	k2: v2

即最终map中会出现两个键值对

当然, 对象和map集合还有一种行内的写法, 如下:

student: name: zhangsan, age: 3
map: k1: v1, k2: v2

数组 (list and set)

- (减号)值表示数组中的一个元素,比如:

pets:
 - cat
 - dog
 - pig

行内写法:

pets: [cat,dog,pig]

yaml注入案例

1.新建person类:

@Data
@AllArgsConstructor
@NoArgsConstructor
@Component
@ConfigurationProperties(prefix = "person")
public class Person 
    private String name;
    private Integer age;
    private boolean happy;
    private Date birth;
    private Map<String, Object> maps;
    private List<Object> lists;
    private Dog dog;

@Component 注解是把person对象交给spring管理

@ConfigurationProperties(prefix = "person") 次注解是注入配置文件(application.properties)中的对象, prefix为指定的对象

@ConfigurationProperties作用:
将配置文件中配置的每一个属性的值,映射到这个组件中;
告诉SpringBoot将本类中的所有属性和配置文件中相关的配置进行绑定参数 
prefix = “person” : 将配置文件中的person下面的所有属性一一对应

2. yaml文件内容:

person:
  name: 张pk
  age: 21
  happy: false
  birth: 1999/01/01
  maps: k1: v1, k2: v2
  lists:
    - code
    - girl
    - music
  dog:
    name: 旺财
    age: 5

3. 出现提示:

IDEA 提示,springboot配置注解处理器没有找到,让我们看文档,我们可以查看文档,找到一个依赖!

根据提示, 打开对象的网站, 上面说需要导入一个依赖

<!-- 导入配置文件处理器,配置文件进行绑定就会有提示,需要重启 -->
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-configuration-processor</artifactId>
  <optional>true</optional>
</dependency>

4. 测试

@SpringBootTest
public class MyTest2 
	@Autowired
    private Person person;

    @Test
    void test2() 
        System.out.println(person);
    

结果:

Person(name=张pk, age=21, happy=false, birth=Fri Jan 01 00:00:00 CST 1999, maps=k1=v1, k2=v2, lists=[code, girl, music], dog=Dog(name=旺财, age=5))

正常输出

加载指定配置文件

@PropertySource :加载指定的配置文件;

@configurationProperties:默认从全局配置文件(application)中获取值;

读取其他yaml文件

读取其他文件 (yaml)

1. 新建配置文件

我们去在resources目录下新建一个student.yaml文件

student:
  name: 李四
  age: 45
  sex: 男

2. 加载配置文件(student类)

@Data
@AllArgsConstructor
@NoArgsConstructor
@PropertySource("classpath:student.yaml")
@Component
public class Student 
    @Value("$name")
    private String name;
    @Value("$age")
    private Integer age;
    @Value("$sex")
    private String sex; // 性别

测试并结果正常输出

读取其他properties文件

读取其他文件 (properties)

1. 新建配置文件

student.properties文件

student.name=李四
student.age=45
student.sex=男

2. 加载配置文件(student类)

@Data
@AllArgsConstructor
@NoArgsConstructor
@PropertySource("classpath:student.properties")
@Component
public class Student 
    @Value("$student.name")
    private String name;
    @Value("$student.age")
    private Integer age;
    @Value("$student.sex")
    private String sex; // 性别

读取其他文件对比

读取yaml的时候不需要写对象名字student

读取properties的时候必须写全key的名字才可以

配置文件占位符

例如:

person:
	...
	age: 21
	...

son:
    uuid: UUID:$random.uuid  # 随机的uuid
    randomInt: $random.int(8)  #随机数, 最大值为8, 也可以写$random.int
    randomLong: $random.long(3)  # 随机long值, 也可以写$random.long
    other: $person.age:other_其他值  # 如果有person的age对象, 结果就是[对象值+_其他值], 如果没有就是[other_其他值]

Son类:

@Data
@AllArgsConstructor
@NoArgsConstructor
@Component
@ConfigurationProperties(prefix = "son")
public class Son 
    private String uuid;
    private Integer randomInt;
    private Long randomLong;
    private String other;

结果:

Son(uuid=UUID:518d1151-4154-479b-926f-040b86a00cf3, randomInt=6, randomLong=2.0, other=21_其他值)

springboot学习总结外部配置(代码片段)

...t允许使用properties文件、yaml文件或者命令行参数作为外部配置(一)常规属性配置(基于properties、yaml文件)请求http://localhost:8090/yml-value-test,返回结果如下:(二)命令行参数配置当Springboot是基于jar包运行时,可以使用命令行... 查看详情

springboot-yaml配置注入

一、yaml语法①配置文件SpringBoot使用一个全局的配置文件,配置文件名称是固定的application.properties语法结构:key=valueapplication.yml语法结构:key:空格value配置文件的作用:修改SpringBoot自动配置的默认值,因为SpringBoot在底层都给... 查看详情

3springboot:springboot配置文件(配置文件yaml属性文件值注入<@value@configurationproperties@propertysource,@imp(代码片

1.配置文件:springboot默认使用一个全局配置文件配置文件名是固定的  配置文件有两种(开头均是application,主要是文件的后缀):->application.properties->application.yml 作用:修改springboot自动配置的默认值   ... 查看详情

yaml配置(代码片段)

yaml文件的作用yaml是一种直观的能够被电脑识别的的数据序列化格式,容易被人类阅读,并且容易和脚本语言交互。yaml的语法规则字母大小写敏感;通过缩进来表示层级关系,同层级元素需左对齐,且缩进的空格数多少没关系;... 查看详情

springboot--配置(yaml/properties)语法(代码片段)

01:SpringBoot–配置(yaml/properties)语法02:SpringBoot–配置(yaml/properties)语法获取配置文件信息、SpringBootConfigurationAnnotation…03:SpringBoot–配置:多环境配置ProfileSp 查看详情

python使用yaml进行python配置(代码片段)

查看详情

yaml语法(代码片段)

...-English-Franchnations:[China,USA,English,Franch]//一行的写法三、将配置文件中的值映射到文件中使用@ConfigurationProperties注解,只有组件可以用。prefix="要注入的属性"导入配置文件处理器会有提示 <dependency> <groupId>org.springframework... 查看详情

yaml配置基本语法(代码片段)

#yaml配置用法,跟properties只能保存键值对:key=value#必须严格遵循以下模式写,对空格的要求及其严格#普通的key-valuename:he#对象student1:name:hezhiqiangage:18#行内写法student2:name:hezhiqiang,age:19#数组pets1:-cat-dog-pig#行内写法pets2:[cat,dog,pig]&nb... 查看详情

springboot-配置文件详解(代码片段)

文章目录SpringBoot-配置文件1.文件类型1.1properties1.2yaml2.配置提示SpringBoot-配置文件1.文件类型1.1properties同以前的properties用法。1.2yaml简介YAML是“YAMLAin’tMarkupLanguage”(YAML不是一种标记语言)的递归缩写。在开发的这种语... 查看详情

04-配置文件:.ini和.yaml(代码片段)

...需要每次都去修改代码源文件,所以可以讲这些参数写在配置文件中,然后在不同的应用场景中,去修改配置文件即可,不用去修改代码源文件。常用的配置文件中.ini文件和.yaml文件。1..ini配置文件1.1.ini配置文件的编写格式。.i... 查看详情

go处理yaml类型的配置文件(代码片段)

...ythonsite/config_yaml直接上代码://可以用于处理读yaml格式的配置文件,同时也可以用于理解golang中的反射packageco 查看详情

springboot--配置(yaml/properties)语法获取配置文件信息springbootconfigurationannotation...(代码片段)

01:SpringBoot–配置(yaml/properties)语法02:SpringBoot–配置(yaml/properties)语法获取配置文件信息、SpringBootConfigurationAnnotation…03:SpringBoot–配置:多环境配置ProfileSp 查看详情

读取python的yaml配置文件(代码片段)

我正在尝试读取YAML配置文件并将其显示给终端。现在,我想尝试诸如检查YAML文件中的数据库(db)不是Sqlite还是Postgres的操作,然后会引发异常,但我不知道如何。我尝试了但失败了,我在做什么错?我的test.yaml文件:db:mysqldbop... 查看详情

springboot配置文件读取和yaml结构(代码片段)

Springboot配置文件和ymal结构文章目录Springboot配置文件和ymal结构源码上一节yaml语法ymal中的数据结构Sprinsgboot配置文件根据profiles读取不同的配置文件获取配置信息通过注解获取配置文件信息下一节源码源码链接地址:上一节Spr... 查看详情

springboot2配置文件application.yaml(代码片段)

源码基于SpringBoot2.4.41、认识配置文件1.1配置文件的加载创建SpringBoot项目的时候,会自动创建一个application.properties文件,该文件是SpringBoot默认的配置文件。SpringBoot在启动的时候会默认去寻找并加载application.properties文件和applicati... 查看详情

(超详解)springboot初级部分-配置-03(代码片段)

文章目录SpringBoot-配置-031.配置文件分类2.yaml2.1yaml定义2.2yaml基本语法2.3yaml数据格式2.4yaml参数引用3.读取配置文件内容3.1@Value3.2Environment3.3@ConfigurationProperties4.profile4.1profile配置方式4.2profile激活方式5.内置配置加载顺序6.外部... 查看详情

apache_conf配置-化妆化妆install.yaml(代码片段)

查看详情

yaml配置文件(代码片段)

https://www.cnblogs.com/xinjing-jingxin/p/9128293.html---文件开始-列表key:val字典注意:字典里面可以嵌套字典,列表等。(举例)https://github.com/msracver/Deformable-ConvNets/blob/master/experiments/faster_rcnn/cfgs/resnet_v1_101_voc0712_rcnn_dcn_end2end.yamlimportyaml#f=... 查看详情