SpringBoot简明教程之项目属性配置(一):YAML简介

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/m0_37888031/article/details/81940344

配置文件

首先,我们打开我们的上一篇博客中创建的项目的resource文件夹中可以看到,在我们的SpringBoot应用使用一个全局的配置文件,配置文件名是固定的:application.xxx。

配置文件的作用:修改SpringBoot自动配置的默认值;因为大多数的配置SpringBoot在底层都给我们自动配置好,所以我们只需要在配置文件中根据应用的实际需求更改配置即可。

例如:我们在默认的配置文件application.properties进行如下配置:

server.port=8081
server.servlet.context-path=/test

然后启动我的SpringBoot应用,在控制台中我们就会发现,我们启动的端口和访问路径都发生了改变:

这里写图片描述

启动浏览器,在浏览器中输入:http://localhost:8081/test/hello,即可正常访问我们的应用。

这里写图片描述

在这里我们需要重点说明的是,除了.properties格式的配置文件以外,SpringBoot还有一种.yml的配置文件格式,强烈推荐后者作为配置文件的格式。

在介绍yml之前呢,我们先介绍一个概念:标记语言。也称为标志语言、标识语言、markup language)是一种将文本(Text)以及文本相关的其他信息结合起来,展现出关于文档结构和数据处理细节的计算机文字编码。与文本相关的其他信息(包括例如文本的结构和表示信息等)与原来的文本结合在一起,但是使用标记(markup)进行标识。当今广泛使用的标记语言是超文本标志语言(HyperText Markup Language,HTML)和可扩展标志语言(eXtensible Markup Language,XML)

扫描二维码关注公众号,回复: 2939860 查看本文章

什么是.yml

.yml的全称是:YAML,是”YAML Ain’t a Markup Language”的递归缩写,意思是:YAML不是一种标记语言。在开发的这种语言时,YAML 的意思其实是:”Yet Another Markup Language”:YAML仍是一种标记语言,但为了强调这种语言以数据做为中心,而不是以标记语言为重点,而用反向缩略语重命名 。

为什么推荐使用YAML作为配置文件

一句话:YAML以数据为中心,比json、xml等更适合做配置文件;

举个简单的例子:

YAML配置端口文件:

server:
  port: 8081

XML配置端口文件:

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

YAML的基本语法:

  • YAML使用可打印的Unicode字符,可使用UTF-8或UTF-16。

  • 使用空格为文件缩进来表示结构,只要是左对齐的一列数据,都是同一个层级的;不过不能使用跳格字符(TAB)。

    例如:

    server:
      port: 8081
      path: /hello 
  • 注解由井字号( # )开始,可以出现在一行中的任何位置,而且范围只有一行(也就是一般所谓的单行注解)

    server: # 端口配置
      port: 8081
  • 每个清单成员以单行表示,并用短杠和空格( - )起始。或使用方括号( [ ] ),并用逗号和空白( , )分开成员。

    pets: # 每个成员当行显示
    ‐ cat
    ‐ dog
    ‐ pig
    pets: [cat,dog,pig] # 行内写法
  • 每个散列表的成员用冒号和空格( : )分开键值和内容。或使用大括号( { } ),并用逗号和空格( , )分开。

    • 散列表的键值可以用问号 ( ? )起始,用来明确的表示多个词汇组成的键值
    friends: # 每个属性单行显示
    lastName: zhangsan        
    age: 20
    friends: {lastName: zhangsan,age: 18} # 行内写法
  • 字符串平常并不使用引号,但必要的时候可以用双引号( )或单引号( )框住。

    • 使用双引号表示字符串时,可用倒斜线( \ )开始的转义字符表示特殊字符。

    例如:name: “zhangsan \n lisi” 输出为: zhangsan 换行 lisi

  • 区块的字符串用缩进和修饰符(非必要)来和其他数据分隔,有新行保留(preserve)(使用符号 | )或新行折叠(flod)(使用符号 > )两种方式。

    data: >
     Wrapped text      
     will be folded      
     into a single       
     paragraph            
    
     Blank lines denote   # 空白行代表段落之间的间距
     paragraph breaks     
  • 在单一文件中,可用连续三个连字号()区分多个文件。

    • 另外,还有选择性的连续三个点号( )用来表示文件结尾。
    --- # 电影清单
    - Casablanca
    - North by Northwest
    - Notorious
  • 重复的内容可使从参考标记星号 ( * )复制到锚点标记( & )。

    
    # 文件中重复的部分用这个方法处理:使用锚点(&)和引用(*)标签将"aa"散列表的内容复制到"bb"散列表
    
    aa:  &id001 
         city:   East Centerville
      state:  KS
    
    bb:  *id001  
  • 指定格式可以使用两个惊叹号( !! ),后面接上值。

    a: 123                     # 整数
    b: "123"                   # 字符串
    c: 123.0                   # 浮点数
    d: !!float 123             # 浮点数,使用!!表示为严格形态
    e: !!str 123               # 字符串,使用严格形态
    f: !!str Yes               # 字符串,使用严格形态

配置文件注入示例

  1. 项目结构图:

    这里写图片描述

  2. 创建一个宠物类:Dog.java

    package com.example.springboot02.controller.bean;
    
    /**
    * @Author: REN
    * @Description:
    * @Date: Created in 0:31 2018/8/22
    */
    public class Dog {
       private String name;
       private Integer age;
    
       @Override
       public String toString() {
           return "Dog{" +
                   "name='" + name + '\'' +
                   ", age=" + age +
                   '}';
       }
    
       public String getName() {
           return name;
       }
    
       public void setName(String name) {
           this.name = name;
       }
    
       public Integer getAge() {
           return age;
       }
    
       public void setAge(Integer age) {
           this.age = age;
       }
    }
    
  3. 创建主人类:Person.java

    package com.example.springboot02.controller.bean;
    
    import org.springframework.boot.context.properties.ConfigurationProperties;
    import org.springframework.stereotype.Component;
    
    import java.util.Date;
    import java.util.List;
    import java.util.Map;
    
    /**
    * @Author: REN
    * @Description:
    * @Date: Created in 0:25 2018/8/22
    */
    
    @Component
    @ConfigurationProperties(prefix = "person")
    public class Person {
       private String name;
       private Integer age;
       private Date birth;
       private List<Object> list;
       private Map<String,Object> maps;
       private Dog dog;
    
       @Override
       public String toString() {
           return "Person{" +
                   "name='" + name + '\'' +
                   ", age=" + age +
                   ", birth=" + birth +
                   ", list=" + list +
                   ", maps=" + maps +
                   ", dog=" + dog +
                   '}';
       }
    
       public String getName() {
           return name;
       }
    
       public void setName(String name) {
           this.name = name;
       }
    
       public Integer getAge() {
           return age;
       }
    
       public void setAge(Integer age) {
           this.age = age;
       }
    
       public Date getBirth() {
           return birth;
       }
    
       public void setBirth(Date birth) {
           this.birth = birth;
       }
    
       public List<Object> getList() {
           return list;
       }
    
       public void setList(List<Object> list) {
           this.list = list;
       }
    
       public Map<String, Object> getMaps() {
           return maps;
       }
    
       public void setMaps(Map<String, Object> maps) {
           this.maps = maps;
       }
    
       public Dog getDog() {
           return dog;
       }
    
       public void setDog(Dog dog) {
           this.dog = dog;
       }
    }
    
  4. 在pom.xml中导入如下依赖:

    <!--导入配置文件处理器,配置文件进行绑定就会有提示-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <optional>true</optional>
        </dependency>
  5. 在配置文件application.yml中进行如下编写:

    server:
     port: 8081
    
    person:
     name: ren
     age: 18
     birth: 2018/08/22
     maps: {k1: v1,k2: v2}
     list:
       - hi
       - hello
     dog:
       name: rack
       age: 2
    
  6. 创建PersonController类:

    package com.example.springboot02.controller;
    
    import com.example.springboot02.controller.bean.Person;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    /**
    * @Author: REN
    * @Description:
    * @Date: Created in 0:19 2018/8/22
    */
    
    @RestController
    public class PersonController {
    
       @Autowired
       Person person;
    
       @RequestMapping("/person")
       public Person person() {
           return person;
       }
    }
  7. 直接运行主函数,在浏览器输入:http://localhost:8081/person 即可看到内容已经成功的进行了注入:

    这里写图片描述

总结

这一节,我们简单介绍了有关Spring Boot的配置文件信息。着重介绍了有关YAML文件的有关语法,以及如何通过配置文件将属性注入到javaBean中,这一节主要掌握如何通过YAML文件对Spring Boot项目属性配置即可。

源码下载

点击下载

特别说明:

参考文献:
尚硅谷,SpringBoot核心技术篇

转载说明: 支持转载,但请保留原作者,原文链接,微信公众号二维码

这里写图片描述
扫码关注作者个人技术公众号,不定期将有学习资源分享

猜你喜欢

转载自blog.csdn.net/m0_37888031/article/details/81940344
今日推荐