一、配置文件
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,如下圖所示。
再次運行得到結果: