Spring Boot 是由Pivotal團(tuán)隊(duì)提供的全新框架耐床,其設(shè)計(jì)目的是用來簡(jiǎn)化新Spring應(yīng)用的初始搭建以及開發(fā)過程涝滴。該框架使用了特定的方式來進(jìn)行配置,從而使開發(fā)人員不再需要定義樣板化的配置。SpringBoot通過集成大量的框架使得依賴包的版本沖突哟忍,以及引用的不穩(wěn)定性等問題得到了很好的解決铅搓。
1.Spring Boot配置文件
當(dāng)我們構(gòu)建完Spring Boot項(xiàng)目后瑟押,會(huì)在resources目錄下給我們一個(gè)默認(rèn)的全局配置文件 application.properties,這是一個(gè)空文件星掰,因?yàn)镾pring Boot在底層已經(jīng)把配置都給我們自動(dòng)配置好了多望,當(dāng)在配置文件進(jìn)行配置時(shí),會(huì)修改SpringBoot自動(dòng)配置的默認(rèn)值氢烘。
配置文件名是固定的
application.properties
但我們可以修改為
application.yml
這兩個(gè)文件本質(zhì)是一樣的怀偷,區(qū)別只是其中的語法略微不同。
Properties簡(jiǎn)介
properties文件大家經(jīng)常用播玖,這里就簡(jiǎn)單介紹一下椎工。其語法結(jié)構(gòu)形如:key=value。注意中文亂碼問題蜀踏,需要轉(zhuǎn)碼成ASCII维蒙。具體如下所示:
userinfo.account=itdragonBlog
userinfo.age=25
userinfo.active=true
userinfo.created-date=2018/03/31 16:54:30
userinfo.map.k1=v1
userinfo.map.k2=v2
userinfo.list=one,two,three
userinfo.position.name=Java架構(gòu)師
userinfo.position.salary=19999.99
從配置文件中取值注入到實(shí)體類中,和YAML是一樣的果覆。
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 : 被修飾類中的所有屬性會(huì)和配置文件中的指定值(該值通過prefix找到)進(jìn)行綁定
*/
@Component
@ConfigurationProperties(prefix = "userinfo")
public class UserInfo {
private String account;
private Integer age;
private Boolean active;
private Date createdDate;
private Map map;
private List list;
private Position position;
// 省略getter颅痊,setter,toString方法
}
2.值的寫法
application.properties 配置文件比較簡(jiǎn)單局待,形式如下
key = value
application.yml 配置文件使用YMAL語言斑响,YMAL不是如XML般的標(biāo)記語言菱属,更適合作為配置文件。
下面說下對(duì)于不同類型(字符串恋捆、數(shù)組)如何去規(guī)范書寫照皆。
2.1 數(shù)字,字符串沸停,布爾
1膜毁、直接寫
name=zhangsan
2、雙引號(hào)
不會(huì)轉(zhuǎn)義字符串里面的特殊字符愤钾,特殊字符會(huì)作為本身想表示的意思
name: "zhangsan \n lisi"
輸出:
zhangsan
lisi
3瘟滨、單引號(hào)
會(huì)轉(zhuǎn)義特殊字符,特殊字符最終只是一個(gè)普通的字符串?dāng)?shù)據(jù)
name: ‘zhangsan \n lisi’
輸出:
zhangsan \n lisi
2.2 對(duì)象能颁、Map(屬性和值)(鍵值對(duì))
例如配置類中的字段為
Map maps;
在yml配置文件中杂瘸,行內(nèi)寫法
person.maps: {key1: value1,key2: value2}
需要注意:號(hào)后的空格,或者
person:
maps:
key: value
在properties配置文件中
person.maps.key=value
2.3 數(shù)組(List伙菊、Set)
在yml配置文件中
person:
list:
- 1
- 2
- 3
行內(nèi)寫法
person:
list: [1,2,3]
在properties配置文件中
person.list[0]=1
person.list[1]=2
person.list[2]=3
3.自定義配置屬性
Spring Boot提供自定義配置組件败玉,拿前面舉例的屬性來寫一個(gè)規(guī)范的配置文件
@Component // 或者@Configuration
@ConfigurationProperties(prefix = "person")
public class Person {
private Map maps;
private List list;
private String name;
public Map getMaps() {
return maps;
}
public void setMaps(Map maps) {
this.maps = maps;
}
public List getList() {
return list;
}
public void setList(List list) {
this.list = list;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
@ConfigurationProperties 注解向Spring Boot聲明該類中的所有屬性和配置文件中相關(guān)的配置進(jìn)行綁定。
prefix = "person":聲明配置前戳镜硕,將該前戳下的所有屬性進(jìn)行映射运翼。
@Component 或者@Configuration:將該組件加入Spring Boot容器,只有這個(gè)組件是容器中的組件兴枯,配置才生效血淌。
4.自定義配置文件
除了在默認(rèn)的application文件進(jìn)行屬性配置,我們也可以自定義配置文件财剖,例如新建 peoson.properties 悠夯,配置內(nèi)容如下
person.mail=yster@foxmail.com
然后在配置類中使用@PropertySource注解注入該配置文件
@Configuration
@ConfigurationProperties(prefix = "person")
@PropertySource(value = "classpath:person.properties")
public class Person {
private String mail;
public String getMail() {
return mail;
}
public void setMail(String mail) {
this.mail = mail;
}
}
測(cè)試@PropertySource注解不支持注入yml文件。
擴(kuò)展:@ImportResource:該注解導(dǎo)入Spring的xml配置文件躺坟,讓配置文件里面的內(nèi)容生效沦补。例如:@ImportResource(locations = {"classpath:beans.xml"})
5.多配置文件
5.1 多Profile文件
我們?cè)谥髋渲梦募帉懙臅r(shí)候,文件名可以是 application-{profile}.properties/yml
默認(rèn)使用application.properties的配置
5.2 yml支持多文檔塊方式
通過---可以把一個(gè)yml文檔分割為多個(gè)瞳氓,并可以通過 spring.profiles.active 屬性指定使用哪個(gè)配置文件
server:
port: 8081
spring:
profiles:
active: prod #指定使用哪個(gè)環(huán)境
---
server:
port: 8083
spring:
profiles: dev #指定屬于哪個(gè)環(huán)境
---
server:
port: 8084
spring:
profiles: prod #指定屬于哪個(gè)環(huán)境
5.3 激活指定profile
無論是使用上述多文檔塊的方式策彤,還是新建application-dev.yml文件,都可以在配置文件中指定 spring.profiles.active=dev 激活指定的profile匣摘,或者
1店诗、使用命令行:
java -jar spring-boot-02-config-0.0.1-SNAPSHOT.jar --spring.profiles.active=dev
可以直接在測(cè)試的時(shí)候,配置傳入命令行參數(shù)
2音榜、虛擬機(jī)參數(shù):
-Dspring.profiles.active=dev
6.配置文件加載位置
springboot 啟動(dòng)會(huì)掃描以下位置的application.properties或者application.yml文件作為Spring boot的默認(rèn)配置文件
–file:./config/
–file:./
–classpath:/config/
–classpath:/
優(yōu)先級(jí)由高到底庞瘸,高優(yōu)先級(jí)的配置會(huì)覆蓋低優(yōu)先級(jí)的配置;SpringBoot會(huì)從這四個(gè)位置全部加載主配置文件赠叼。
項(xiàng)目打包好以后擦囊,我們可以使用命令行參數(shù)的形式违霞,啟動(dòng)項(xiàng)目的時(shí)候來指定配置文件的新位置;指定配置文件和默認(rèn)加載的這些配置文件共同起作用形成互補(bǔ)配置瞬场;
我們還可以通過spring.config.location來改變默認(rèn)的配置文件位置买鸽,示例:
java -jar spring-boot-demo-0.0.1-SNAPSHOT.jar --spring.config.location=G:/application.properties