spring boot中yaml简介以及语法

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_26347463/article/details/82789370
  1. Spring Boot使用一个全局的配置文件(配置文件名是固定的)
    a) application.properties
    b) application.yml
    配置文件放在src/main/resources目录或者类路径/config/下
  2. .yml是YAML(YAML Ain’t Markup Language)语言的文件,以数据为中心,比json/xml等更适合做配置文件
    全局配置文件可以对一些默认配置值进行修改
  3. .yml配置示例
    配置端口号:
server:
  port: 8081
  1. yaml基本语法:
    a) k:(空格)v:表示一对键值对(空格必须有),以空格的缩进来控制层级关系;只要是左对齐的一列数据,则表示都是同一个层级的。例如如下代码:
server:
  port: 8081

注意:属性值大小写敏感

  1. 值的写法
    a) 字面量(K:空格v):普通的值(数字,字符串,布尔)
    i. 字符串默认不用加上单引号或者双引号
    ii. “”:双引号;不会转义字符串里面的特殊字符,特殊字符会作为本身想表示的意思,例如:
    name: “zhangsan \n lisi” 输出 zhangsan 换行 lisi
    iii. ‘’:单引号;会转移特殊字符,特殊字符最终只是一个普通的字符串数据
    name: ‘zhangsan \n lisi’ 输出 zhangsan \n lisi
    b) 对象/Map(属性和值)(键值对)(k: v)语法示例如下:
friends:
  lastName: zhangsan
  age: 20

ii. 行内写法:

friends: {lastName: zhangsan,age: 18}

c) 数组(List,Set)(用-值表示数组中的一个元素)语法示例如下:

pets:
  -	cat
  -	dog
  -	pig

ii. 行内写法:

pets: [cat,dog,pig]
  1. 配置文件值注入给JavaBean示例如下:
    注:我们可以利用Maven导入配置文件处理器,方便在配置文件中提示我们,要导入的Maven坐标如下:
<!-- 导入配置文件处理器,配置文件绑定后就会有提示 -->
<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-configuration-processor</artifactId>
   <optional>true</optional>
</dependency>

创建一个Person类,如下代码片段:(需要注意的是,需要自动注入到Spring容器中的类,要跟SpringBoot主配置类是同包下,或是主配置类所处包的子包下)

package test.spring.boot.demo;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import java.util.Date;
import java.util.*;
//将配置文件中的Person属性赋的值映射到该组件中
//@ConfigurationProperties:告诉SpringBoot将本类的所有属性和配置文件中相应的属性进行相互关联映射赋值
//该注解中的prefix属性告知绑定配置文件中的哪个属性
//当前的Person组件必须要加载到Spring容器中,才能使用@ConfigurationProperties提供的功能
@Component
@ConfigurationProperties(prefix = "person")
public class Person {
    private String lastName;
    private Integer age;
    private Boolean boss;
    private Date birth;
    private Map<String,Object> maps;
    private List<Object> lists;
	private Dog dog;
	//…省略getter/setter以及toString()方法
}

创建一个Dog类,示例如下:

package test.spring.boot.demo;

public class Dog {
    private String name;
    private Integer age;

    @Override
    public String toString() {
        return "Dog{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }

    //...省略getter/setter方法的生成
}

在src/main/resources/目录中建立application.yml,配置代码如下:

person:
  lastName: zhangsan
  age: 18
  boss: false
  birth: 2017/12/12
  maps: {k1: v1,k2: 12}
  lists:
    - lisi
    - zhaoliu
  dog:
  	name: luck
  	age: 3

最后进入在src/test/java/中的SpringBoot单元测试中,编写如下代码,进行测试,看在application.yml中配置的person属性是否绑定映射到Person对象中:

package test.spring.boot.demo;
import org.springframework.context.ApplicationContext;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

/**
 * SpringBoot单元测试
 * 可以在测试期间很方便的类似编码一样进行自动注入到容器
 */
@RunWith(SpringRunner.class)
@SpringBootTest
public class DemoApplicationTests {
	@Autowired
	Person person;

	@Test
	public void contextLoads() {
		System.out.print(person.toString());
	}
}

最后控制太输出如下效果:
在这里插入图片描述
说明yml值注入到JavaBean成功

展开阅读全文

没有更多推荐了,返回首页