SpringBoot两种配置文件语法你真的了解吗

在使用springboot的时候,springboot给我们提供了很多配置文件,这些配置文件会被springboot自动装配的时候,全部给我们装配上,而我们使用框架的时候只需要导入他的starter即可,不需要任何配置文件即可使用。

配置文件

虽然他为我们配置好了,但是有的时候我们并不想用它配置好的默认值,springboot为我们提供了两种配置文件来修改默认的配置文件,application.propertiesapplication.yml文件,需要注意的是配置文件名是固定的。这两个配置文件任意一个都可以更改springboot配置的默认值,唯一区别就是语法。

配置文件路径:配置文件需要放在src/main/resources目录或者类路径/config下
在这里插入图片描述

本篇博客分别讲解一下这两个文件的语法。

yml语法

yml是YAML(YAML Ain’t Markup Language)语言的文件,以数据为中心,比json、xml等更适合做配置文件。

yml不仅仅可以修改springboot默认值,并且他还可以当做一个引用文件来用,和Java对象来进行数据绑定。

1、基本语法

k:(空格)v:表示一对键值对(空格必须有);
以空格的缩进来控制层级关系;只要是左对齐的一列数据,都是同一个层级的

server:
  port: 8090
2、YAML 支持的三种数据结构

字面量:普通的值(数字,字符串,布尔)
k: v:字面直接来写;
字符串默认不用加上单引号或者双引号;
“”:双引号;不会转义字符串里面的特殊字符;特殊字符会作为本身想表示的意思
name: “zhangsan \n lisi”:输出;zhangsan 换行 lisi
‘’:单引号;会转义特殊字符,特殊字符最终只是一个普通的字符串数据
name: ‘zhangsan \n lisi’:输出;zhangsan \n lisi

对象、Map(属性和值)(键值对):
k: v:在下一行来写对象的属性和值的关系;注意缩进
对象还是k: v的方式
这里以person为名的map为例,两种yml写的方式:

常规写法:

person:
	lastName: zhangsan 
	age: 20

行内写法:

person: {lastName: zhangsan,age: 18}

数组(List、Set):
用- 值表示数组中的一个元素

常规写法:

pets: 
	‐ cat 
	‐ dog 
	‐ pig

行内写法

pets: [cat,dog,pig]
3、配置文件值注入

针对于上面三种数据结构,可能有的在想,yml不就是纯配置文件,这些map呀list有啥用,他是可以和我们的java对象来进行数据绑定的,有时候初始化值什么的,我们可以把这些值放到yml文件当中,这样运维更好维护一点,而不用去java代码当中修改相关配置。

javaBean: 此处省略了get、set方法

package com.gzl.cn.bean;
import java.util.Date;
import java.util.List;
import java.util.Map;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

/**
 * 将配置文件中配置的每一个属性的值,映射到这个组件中
 * @ConfigurationProperties:告诉SpringBoot将本类中的所有属性和配置文件中相关的配置进行绑定;
 *      prefix = "person":配置文件中哪个下面的所有属性进行一一映射
 *
 * 只有这个组件是容器中的组件,才能容器提供的@ConfigurationProperties功能;
 *  @ConfigurationProperties(prefix = "person")默认从全局配置文件中获取值;
 *
 */
@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;

}

dog对象

package com.gzl.cn.bean;

public class Dog {

    private String name;
    private Integer age;

}

application.yml配置文件

server:
  port: 8090
  
person:
    lastName: hello
    age: 18
    birth: 2017/12/12
    maps: {k1: v1,k2: v2}
    boss: true
    lists:
      - lisi
      - zhaoliu
    dog:
      name: 小狗
      age: 12
    last-name: zhangsan 

单元测试

package com.gzl.cn;

import com.gzl.cn.bean.Person;
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.context.ApplicationContext;
import org.springframework.test.context.junit4.SpringRunner;


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

	@Autowired
	Person person;

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

}

这时候会发现他成功的和java对象进行数据绑定。 在这里插入图片描述

properties语法

1、配置文件值注入

application.properties文件

server.port=8090

person.age=18
person.last-name=zhangsan
person.birth=2017/12/12
person.maps.k1=v2
person.maps.k2=v3
person.boss=true
person.lists=guitar,sing,play
person.dog.age=11
person.dog.name=www

这块我们还是用上面的person类来做实验,只把yml配置换成了properties文件。
再次运行项目依然可以完成对象之间的数据绑定。

在这里插入图片描述

本篇博客只是讲解了引入全局配置类做数据绑定,下一篇写一篇加载指定文件来做java对象数据绑定。

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

怪 咖@

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值