在使用springboot的时候,springboot给我们提供了很多配置文件,这些配置文件会被springboot自动装配的时候,全部给我们装配上,而我们使用框架的时候只需要导入他的starter即可,不需要任何配置文件即可使用。
配置文件
虽然他为我们配置好了,但是有的时候我们并不想用它配置好的默认值,springboot为我们提供了两种配置文件来修改默认的配置文件,application.properties和application.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对象数据绑定。