SpringBoot之Yaml学习

简介: SpringBoot的配置文件除了支持application.properties文件格式还支持application.yaml格式的配置文件。

前言


SpringBoot的配置文件除了支持application.properties文件格式还支持application.yaml格式的配置文件。


YAML (YAML Aint Markup Language)是一种标记语言,通常以.yml为后缀的文件,是一种直观的能够被电脑识别的数据序列化格式,并且容易被人类阅读,容易和脚本语言交互的,比json、xml和等更适合做配置文件。


Yaml语法结构


Yaml基本语法如下:


1、使用缩进表示层级关系


2、大小写敏感


3、缩进不允许使用tab,只允许空格


4、缩进的空格数不重要,只要相同层级的元素左对齐即可


5、字符串无需加引号,如果要加,''与""表示字符串内容 会被 转义/不转义


6、key: value;kv之间有空格


Yaml数据结构


Yaml文件支持三种数据结构:


1、字面量:普通的值(数字,字符串,布尔)


key: value:字面直接来写;


字符串默认不用加上单引号或者双引号;


"":双引号;不会转义字符串里面的特殊字符;特殊字符会作为本身想表示的意思


name:   "李青 \n 亚索":输出:李青       亚索


'':单引号;会转义特殊字符,特殊字符最终只是一个普通的字符串数据


name: ‘李青 \n 亚索’:输出:李青 \n  亚索


2、对象:key-value键值对的集合


key: value:在下一行来写对象的属性和值的关系,需要进行缩进


对象还是key: value的方式


friends:         
    lastName: zhangsan         
    age: 20
复制代码


行内写法:


friends: {lastName: zhangsan,age: 18}
复制代码


3、数组:一组按次序排列的值(List、Set):


使用- 值表示数组中的一个元素


pets:  
    - cat  
    - dog  
    - pig
复制代码


数组行内写法:


pets: [cat,dog,pig]
复制代码


示例


1、在SpringBoot项目中声明一个person实体类和Phone实体类:


@Data
@ToString
@Component
//读取配置文件中以person开头的配置
@ConfigurationProperties(prefix = "person")
public class Person {
    private String userName;
    private Boolean boss;
    private Date birth;
    private Integer age;
    private Phone phone;
    private String[] interests;
    private List<String> animal;
    private Map<String, Object> score;
    private Set<Double> salarys;
    private Map<String, List<Phone>> allPhones;
}
复制代码


@Data /*自动添加getter、setter方法,需要引入lombok依赖*/
@ToString
public class Phone {
    private String band;
    private Double price;
}
复制代码


2、在pom文件中引入spring-boot-configuration-processor依赖,这样自定义的类和配置文件就可以和默认配置一样可以绑定提示。


<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-configuration-processor</artifactId>
    <optional>true</optional>
</dependency>
复制代码


3、上述依赖只是为了方便开发,适用于开发环境,所以可以在打包的时候不将其进行打包,在pom文件build节点加入下面配置,不加也可以,没有影响,只是会影响打包的大小和速度:


<build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <excludes>
                        <exclude>
                            <groupId>org.springframework.boot</groupId>
                            <artifactId>spring-boot-configuration-processor</artifactId>
                        </exclude>
                    </excludes>
                </configuration>
            </plugin>
        </plugins>
    </build>
复制代码


4、然后在application.yml文件中写入Person的yaml格式的配置:


person:
#  单引号会将\n作为字符串输出,双引号会将\n换行输出:所以双引号不会进行转义,而单引号会转义,因为\n本来就是转义换行的意思
#  -n表示N大写,等同于userName
  user-name: 张三
  boss: true
#  默认时间格式是/
  birth: 2020/12/29
  age: 18
  phone:
    band: 华为
    price: 6000.00
#  interests: [篮球,足球]等同于下面格式
#    -代表一个元素
  interests:
    - 篮球
    - 足球
    - 18
    - 175158455
  animal: [猫,狗]
#  score: {english:80,math:90}
  score:
    english: 80
    math: 90
  salarys:
    - 9999.98
    - 9999.99
  allPhones:
    china:
      - {band: 华为,price: 6000.00}
      - band: 小米
        price: 5000.98
      - band: oppo
        price: 4000.36
    America: [{band: Iphone,price: 7000.23},{band: nokia,price: 4002.36}]
复制代码


5、写一个controller类进行测试:


@RestController
public class YamlController {
    @Autowired
    private Person person;
    @RequestMapping("/person")
    public Person returnPerson(){
        return  person;
    }
}
复制代码


启动程序,浏览器地址栏输入:http://localhost:8081/share/person,输出以下结果:


微信截图_20220521201714.png

总结

以上就是yaml简单的学习,yaml格式文件在开发中使用比较广泛,它比properties文件更加直观,清楚,尤其非常适合用来做以数据为中心的配置文件。在springboot的配置中如果application.properties文件和application.yml文件同时存在,那么都会生效,如果两个文件中对同一配置进行设置,则会以properties文件为准。application.yml也可以写成application.yaml。


如有任何问题或者不对的地方欢迎一起交流讨论学习!

目录
相关文章
|
3月前
|
Java
SpringBoot之yaml
SpringBoot之yaml
|
4月前
|
XML Java 数据格式
SpringBoot中yaml格式、语法规则及数据读取方式(3种)
SpringBoot中yaml格式、语法规则及数据读取方式(3种)
205 0
|
3月前
|
Java C++
SpringBoot中的properties,yml,yaml的区别
SpringBoot中的properties,yml,yaml的区别
33 0
|
8月前
|
XML JSON Java
SpringBoot入门(三) 之springboot的配置配置文件以及yaml的使用
SpringBoot入门(三) 之springboot的配置配置文件以及yaml的使用
159 0
SpringBoot入门(三) 之springboot的配置配置文件以及yaml的使用
|
6月前
|
Kubernetes Java 容器
k8s部署springboot项目yaml
k8s部署springboot项目yaml
124 0
|
8月前
|
前端开发 Java 数据库
SpringBoot解析指定Yaml配置文件
最近在看某个开源项目代码并准备参与其中,代码过了一遍后发现多个自定义的配置文件用来装载业务配置代替数据库查询,直接响应给前端,这里简单记录一下实现过程。
273 0
|
4月前
|
JSON Kubernetes API
k8s学习-k8s资源对象与yaml结构
k8s学习-k8s资源对象与yaml结构
53 0
|
9月前
|
XML 运维 Java
SpringBoot中Yaml语法和JSR303数据校验《第三课》
SpringBoot中Yaml语法和JSR303数据校验《第三课》
145 0
|
10月前
|
XML JSON Java
【SpringBoot学习笔记 二】YAML格式文件配置方式详解
【SpringBoot学习笔记 二】YAML格式文件配置方式详解
439 0
|
11月前
|
JSON Kubernetes Cloud Native
云原生之容器编排实践-SpringBoot应用以YAML描述文件部署pod到minikube
云原生之容器编排实践-SpringBoot应用以YAML描述文件部署pod到minikube
223 0