Spring Boot 屬性配置檔案詳解
阿新 • • 發佈:2019-02-01
SpringBoot 配置檔案預設為application.properties,但現在的趨勢是使用yaml,它是類似於標準通用標記語言的子集XML的資料描述語言,語法比XML簡單很多。application.properties 檔案和 application.yaml 檔案的區別後續詳解~
一、自定義屬性與載入
把專案中的配置檔案application.properties改成application.yaml
- application.yaml
test:
user:
username : zhangsan
age : 18
toString: the age of ${test.user.username} is ${test.user.age}
- 屬性類:PropertiesConfig
package com.springboot.testone.bean;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
@Component
public class PropertiesConfig {
//通過@Value("${屬性名}")註解來載入對應的配置屬性
@Value("${test.user.username}")
private String username;
@Value("${test.user.age}")
private String age;
@Value("${test.user.toString}")
private String toString;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
public String getToString() {
return toString;
}
public void setToString(String toString) {
this.toString = toString;
}
}
- 測試Controller
package com.springboot.testone.controller;
import com.springboot.testone.bean.PropertiesConfig;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
@RestController
@EnableAutoConfiguration
public class HelloController {
@Autowired
private PropertiesConfig propertiesConfig;
@RequestMapping(value = "/test",method = RequestMethod.GET)
public String hello() {
//return "hello,this is a springboot demo";
//return propertiesConfig.getUsername() + ":" + propertiesConfig.getAge();
return propertiesConfig.getToString();
}
}
二、自定義屬性注入bean
- 將上面application.yml檔案中的test.user注入到User物件裡,注意這裡的prefix指定的是test.user,對應配置檔案中的結構
package com.springboot.testone.bean;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@Component
@ConfigurationProperties(prefix = "test.user")
public class User {
private String username;
private int age;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
- 測試Controller
@Autowired
private User user;
@RequestMapping(value = "/test2", method = RequestMethod.GET)
public String test2(){
return user.getUsername() + ":" + user.getAge();
}
三、自定義額外的配置檔案
假如我們不想把有些配置配置在application.yaml/properties中。新建其他配置檔案:比如新建test.yaml檔案。配置內容如上面的application.yml一樣。那麼我們注入物件時,應該這麼寫
@Configuration
@PropertySource(value = "classpath:test.yml")
@ConfigurationProperties(prefix = "test.user")
四、多個環境配置檔案
在現實的開發環境中,我們需要不同的配置環境;格式為application-{profile}.properties,其中{profile}對應你的環境標識,比如:
- application-test.properties:測試環境
- application-dev.properties:開發環境
- application-prod.properties:生產環境
怎麼使用?只需要我們在application.yml中加:
spring:
profiles:
active: dev
因為主入口都是application.yaml,這裡指定配置檔案為dev,即啟用application-dev.yaml檔案
server:
port: 8888
啟動工程,發現程式的埠不再是8080,而是8888,表示開發環境配置成功。五、官方支援預設配置檔案屬性
六、配置檔案優先順序
- 當前目錄下的一個/config子目錄
- 當前目錄
- 一個classpath下的/config包
- classpath根路徑(root)
#注意# 如果我們有多個配置檔案,優先順序高的配置檔案中存在和優先順序低的配置檔案相同屬性時,取優先順序高配置檔案的,不衝突的時候,優先順序低的配置檔案屬性同樣會被載入,而不是隻載入優先順序高的配置檔案屬性。