目錄
一、簡單認識YAML
SpringBoot是基於約定的,所以很多配置都有默認值,但如果想使用自己的配置替換默認配置的話,就可以使用
application.properties或者application.yml(application.yaml)進行配置。SpringBoot默認會從Resources目錄下加載application.properties或application.yml(application.yaml)文件。其中,application.properties文件是鍵值對類型的文件,之前一直在使用,所以此處不在對properties文件的格式進行描述。除了properties文件外,SpringBoot還可以使用yml文件進行配置,下面對yml文件進行講解。
YML文件格式是YAML (YAML Aint Markup Language)編寫的文件格式,YAML是一種直觀的能夠被電腦識別的的數據數據序列化格式,並且容易被人類閱讀,容易和腳本語言交互的,可以被支持YAML庫的不同的編程語言程序導入,比如: C/C++, Ruby, Python, Java, Perl, C#, PHP等。YML文件是以數據爲核心的,比傳統的xml方式更加簡潔。
二、YAML語法格式
- 標準格式:key:(空格)value
- 使用空格代表層級關係,以“:”結束
我們以之前學習過的application.properties文件爲例進行修改該文件:
#設置運行時爲debug模式
#debug=false
debug: false
#修改tomcat的默認端口爲8080
#server.port=8080
#server.servlet.cotext-path=/myspringboot
server:
port: 8080
servlet:
context-path: /
#idea對yml有良好支持,可自動生成
#spring.http.encoding.charset=UTF-8
#spring.mvc.date-format=yyyy-MM-dd
spring:
http:
encoding:
charset: UTF-8
mvc:
date-format: yyyy-MM-dd
三、環境配置文件
- 在實際的項目的過程中,有些配置文件在開發、測試或者生產等不同的環境中可能是不同的,比如說數據庫連接等。
- Spring給我們提供了profiles機制,Spring Boot針對不同的環境提供了不同的Profiles文件。
- Profiles文件的默認命名格式爲application-{env}.yml
- 使用spring.profiles.actives選項來指定不同的profiles
例如:
application-dev.properties — 這是開發環境
application-prod.properties — 這是生產環境
當我們同時創建了application.properties、application-dev.properties、application-prod.properties三個文件,
例如:修改三個文件中server.port的配置,即端口號的配置,經過測試,application-dev.properties中的配置覆蓋了application.propertie中的配置。所以呢,我們在配置文件中可以將於環境無關的配置屬性放到application.properties文件中,然後根據環境的變化,將不同的屬性配置放到相應配置文件中去。
四、自定義配置
Spring Boot內置的配置項遠遠不能支持我們的程序運行,在項目設計的時候,往往因爲擴展性的需要,項目需要預留很多的自定義配置,Spring Boot允許我們配置自定義選項。
在SpringBoot中,有兩仲方式使用自定義選項:
- @Value單個屬性注入
- @ConfigurationProperties類型安全加載
新建一個自定義的properties文件config.properties文件,進行編寫自定義的屬性。在編寫自定義屬性之前,我們先需要修改一下idea的設置,因爲properties文件對中文的可讀性性是非常不好的,打開設置進行如下的勾選;
舉例:
1、@Value單個屬性的注入:
在MyController類中進行如下編寫:
@Value("${app.name}")
private String name;
@Value("${app.page-size}")
private Integer pageSize;
2、@ConfigurationProperties類型安全加載
編寫一個AppConfig類:
@Component//這是一個組件類,寫上這個註解,啓動時會自動加載
//將所有app前綴的屬性自動賦值給對應的bean屬性
@ConfigurationProperties(prefix="app")
public class AppConfig {
private String name ;
private String description;
private String version;
private Integer pageSize;
private Boolean showAdvert;
private String website;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public String getVersion() {
return version;
}
public void setVersion(String version) {
this.version = version;
}
public Integer getPageSize() {
return pageSize;
}
public void setPageSize(Integer pageSize) {
this.pageSize = pageSize;
}
public Boolean getShowAdvert() {
return showAdvert;
}
public void setShowAdvert(Boolean showAdvert) {
this.showAdvert = showAdvert;
}
public String getWebsite() {
return website;
}
public void setWebsite(String website) {
this.website = website;
}
在MyController類中進行如下編寫:
//動態注入IOC容器中匹配的bean
@Autowired
private AppConfig appConfig;
啓動入口類即可獲取到config.properties文件中所寫到的所有屬性。