一、配置文件
Spring Boot的配置文件的作用是修改自动配置中的一些默认值,这些配置在底层都已经配置好了。
Spring Boot使用全局的配置文件,配置文件的名称是固定的,而全局的配置文件能够对系统的一些默认配置进行相应的修改。Spring Boot主要有两种配置文件:
- application.praperties
- application.yaml
配置文件主要放在src/main/resources目录或者类路径/config下。
二、ymal配置文件
yaml是YMAL(YAML Ain't Markup Language)语言的文件,它一种以数据为中心,比json、xml更适合做配置文件。
1、基本语法
(1)key:(空格)value
表示一对键值对(注意空格必须有);
它是以空格的缩进来控制层级关系,对于左对齐的缩进均表示同一层级关系。同时注意属性和值对大小写也是敏感的。
server:
port: 8081
改配置等价于server.port=8081
(2)值的写法
key: value ------> 字面直接来写;
--""双引号:不会转义字符串里面的特殊字符,特殊字符会作为本身想表达的意思。
例如:name: "zhangsan \n lisi",这里输出结果:zhangsan 换行 lisi。
--''单引号:会转移特殊字符,特殊字符最终最终会被翻译为一个普通的字符串数据。
例如:name: "zhangsan \n lisi",这里输出结果:zhangsan \n lisi。
对象、Map(属性和值)(键值对):
k: v:在下一行来写对象的属性和值的关系,注意缩进;如下面有一个friends对象:
friends:
lastName: zhangsan
age: 20
行内写法:
friends: {lastName: zhangsan,age: 20}
数组(List、Set)
使用- 值表示数组中的元素:
pets:
- cat
- dog
- pig
行内写法:
pets: [cat,dog,pig]
三、配置文件值的注入(实例)
1、首先创建一个application.yml配置文件:
server:
port: 8081
person:
name: zhangsan
age: 18
boss: false
birth: 2017/12/12
maps: {k1: v1,k2: v2}
lists:
- lisi
- zhaoliu
dog:
name: 小狗
age: 3
2、根据配置文件,创建一个Person类和Dog类
package cn.com.jzt.insight.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;
/**
* 将配置文件中的配置的每一个属性的值,映射到这个组件中;
* @ConfigurationProperties :告诉SpringBoot将奔雷中的所有属性和配置文件中的配置进行绑定
* prefix = "person" :标识配置文件中那个下面的所有属性进行一一映射。
*
* 只有这个组件是容器中的组件,才能够提供@ConfigurationProperties的注解
*/
@Component
@ConfigurationProperties(prefix = "person")
public class Person {
private String lastName;
private Integer age;
private Boolean boss;
private Date birth;
private Map<String, Object> map;
private List<Object> lists;
private Dag dog;
@Override
public String toString() {
return "Person{" +
"lastName='" + lastName + '\'' +
", age=" + age +
", boss=" + boss +
", birth=" + birth +
", map=" + map +
", lists=" + lists +
", dog=" + dog +
'}';
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public Boolean getBoss() {
return boss;
}
public void setBoss(Boolean boss) {
this.boss = boss;
}
public Date getBirth() {
return birth;
}
public void setBirth(Date birth) {
this.birth = birth;
}
public Map<String, Object> getMap() {
return map;
}
public void setMap(Map<String, Object> map) {
this.map = map;
}
public List<Object> getLists() {
return lists;
}
public void setLists(List<Object> lists) {
this.lists = lists;
}
public Dag getDog() {
return dog;
}
public void setDog(Dag dog) {
this.dog = dog;
}
}
package cn.com.jzt.insight.bean;
public class Dag {
private String name;
private Integer age;
@Override
public String toString() {
return "Dag{" +
"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、最后写一个测试类:
package cn.com.jzt.insight;
import cn.com.jzt.insight.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.test.context.junit4.SpringRunner;
/**
* SpringBoot的单元测试
* 可以在测试期间进行自动注入功能
*/
@RunWith( SpringRunner.class )
@SpringBootTest
public class InsightSpringBootApplicationTest {
@Autowired
Person person;
@Test
public void contextLoads(){
System.out.println(person);
}
}
4、结果
运行该测试类,得到一些结果:
说明我们的配置文件的内容值已经被注入到类中。
四、利用properties文件配置
与yml配置文件相同,使用properties也可做为配置文件注入到spring中。application.properties文件如下:
server.port=8081
#配置person的值
person.last-name=zhangsan
person.age=18
person.boss=false
person.birth=2017/12/12
person.maps.k1=v1
person.maps.k2=v2
person.lists=a,b,c
person.dog.name=小狗
person.dog.age=3
再次运行测试类:InsightSpringBootApplicationTest,运行结果如下:
可以发现,与yml配置文件一样,也注入到了spring容器中。但是出现了中文乱码现象。解决方法如下:
在File--settings--Editor--File Encoding,在Default encoding for properties files中选择utf-8,并勾选Transparent native-to-ascii conversion,如下图所示。
再次运行得到结果: