yml怎么用?map?list?

走过路过不要错过,各位看官,听我慢慢道来

本篇文章主要包含三大类:
1,yml是啥东东
2,yml怎么写
3,yml怎么用

YML是什么

  YAML (YAML Ain't a Markup Language)YAML不是一种标记语言,通常以.yml为后缀的文件,
  是一种直观的能够被电脑识别的数据序列化格式,并且容易被人类阅读,容易和脚本语言交互的,
  可以被支持YAML库的不同的编程语言程序导入,一种专门用来写配置文件的语言。
  • 为啥要用yml呢

      YAML易于人们阅读。
      YAML数据在编程语言之间是可移植的。
      YAML匹配敏捷语言的本机数据结构。
      YAML具有一致的模型来支持通用工具。
      YAML支持单程处理。
      YAML具有表现力和可扩展性。
      YAML易于实现和使用。
    

怎么书写

  • YML的语法

    • 基本规则

        大小写敏感
        使用缩进表示层级关系
        缩进时不允许使用Tab键,只允许使用空格。
        缩进的空格数目不重要,只要相同层级的元素左侧对齐即可
      
    • 支持的数据结构

      对象:键值对的集合,又称为映射(mapping)/ 哈希(hashes) / 字典(dictionary)
      数组:一组按次序排列的值,又称为序列(sequence) / 列表(list)
      基本类型:单个的、不可再分的值
      
      • 基本语法
        k:(空格)v:表示一对键值对
        v:包含上面举的数据
        k;string类型

        test:
          name: 小李
          age: 15
        
      • v的使用说明

        • 基本类型:数字,字符串,布尔

          k: v:字面直接来写;
          字符串默认不用加上单引号或者双引号;
          

          "":双引号:不会转义字符串里面的特殊字符;

            特殊字符会作为本身想表示的意思;
            如 :name: "zhangsan \n lisi":输出;zhangsan 换行 lisi
          

          '':单引号:转义特殊字符

          特殊字符终只是一个普通的字符串数据 ,
          如: name: ‘zhangsan \n lisi’:输出;zhangsan \n lisi 
          
      • 对象、Map(属性和值)(键值对):

         k: v:在下一行来写对象的属性和值的关系;注意缩进
         对象还是k: v的方式
        
        friends: 
         	lastName: zhangsan          
         	age: 20
         ## 行内写法:friends: {lastName: zhangsan,age: 18}
        
        
      • 数组(List、Set):
        用- 值表示数组中的一个元素

          pets:  
         	‐ cat  
         	‐ dog  
         	‐ pig
         # 行内写法 pets: [cat,dog,pig]
        
  • yml的使用

    • 简单类型使用 @Value

    • 复杂类型使用 :@ConfigurationProperties

        如果说,我们只是在某个业务逻辑中需要获取一下配置文件中的某项值,使用@Value; 
        如果说,我们专门编写了一个javaBean来和配置文件进行映射,我们就直接使用@ConfigurationProperties;
      

      yml文件:

spring:
  test: 小猪
  #list<map>
  testList:
    -
      name: 小王
      age: 12
    -
      name: 小李
      age: 13
  # map<String,String>
  testMap:
    name: 小朱
    age: 14
testname: 小明
  • 使用@Value
 	package com.example.demo.yml;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

import java.util.Map;

/**
* value 的使用
*/

@Component
public class ValueTest {
 // 直接赋值

 @Value("小李")
 private  String name;

 @Value("1")
 private int num;

 //读取配置文件的信息
 @Value("${spring.testMap.name}")
 private String name2;

 @Value("${spring.test}")
 private String name1;
//报错
//    @Value("${spring.testMap}")
 private Map<String,String> map;



 //使用SpEL
 @Value("#{1+1}")
 private int num1;

 @Override
 public String toString() {
     return "ValueTest{" +
             "name='" + name + '\'' +
             ", num=" + num +
             ", name2='" + name2 + '\'' +
             ", name1='" + name1 + '\'' +
             ", map=" + map +
             ", num1=" + num1 +
             '}';
 }
}

test:

    @Autowired
    private ValueTest valueTest;
    @Test
    public void test111(){
        System.out.println(valueTest);
    }
// ValueTest{name='小李', num=1, name2='小朱', name1='小猪', map=null, num1=2}
  • 使用@ConfigurationProperties
<dependency>         
		 <groupId>org.springframework.boot</groupId>              							
		 <artifactId>spring‐boot‐configuration‐processor</artifactId>              
		 <optional>true</optional>              
</dependency>
package com.example.demo;

import lombok.Data;
import org.hibernate.validator.constraints.Length;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import org.springframework.validation.annotation.Validated;

import javax.validation.constraints.Size;
import java.util.List;
import java.util.Map;

@Data
@Component
@ConfigurationProperties(prefix = "spring")
@Validated
public class TestConfigurationProperties {
    private List<Map> testList;
    private Map<String,String> testMap;

    private String name;

    private String test;
}



@Autowired
    private TestConfigurationProperties testConfigurationProperties;

    @Test
    public void test8(){
        System.out.println(testConfigurationProperties.getTestMap());
        System.out.println(testConfigurationProperties.getTestList());
        System.out.println(testConfigurationProperties.getName());
        System.out.println(testConfigurationProperties.getTest());

    }
//{name=小朱, age=14}
//[{name=小王, age=12}, {name=小李, age=13}]
//null
//小猪
在Spring Boot中,可以使用`@Value`注解或者`Environment`对象手动解析`application.yml`中的配置,但它们不支持直接映射为复杂类型如`List<Map<String, Object>>`。为了实现这一功能,可以使用`@ConfigurationProperties`注解配合`@EnableConfigurationProperties`或者`@ConstructorBinding`注解来实现复杂配置的绑定。 下面是一个简单的例子,展示如何将`application.yml`中的配置映射到`List<Map<String, Object>>`类型: 首先,在`application.yml`中定义需要映射的配置,例如: ```yaml my-config: list: - key1: value1 key2: value2 - key3: value3 key4: value4 ``` 然后,创建一个配置类并使用`@ConfigurationProperties`注解: ```java import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Component; import java.util.List; import java.util.Map; @Component @ConfigurationProperties(prefix = "my-config") public class MyConfigProperties { private List<Map<String, Object>> list; // getters and setters public List<Map<String, Object>> getList() { return list; } public void setList(List<Map<String, Object>> list) { this.list = list; } } ``` 在这个例子中,`@ConfigurationProperties`注解的`prefix`属性设置为`my-config`,这表明这个配置类将会绑定`application.yml`中`my-config`键下的配置。`List<Map<String, Object>>`将自动填充为配置文件中定义的列表和映射。 使用这种方式,Spring Boot会自动将配置文件中的数据绑定到配置类的属性上,无需手动解析配置文件内容。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值