可以不用配置文件嗎
完全可以不用配置文件,直接啓動就行,參數都是默認的。
就算用配置文件,這個配置文件跟Spring中那種繁瑣的配置文件也完全不是一個概念。
SpringBoot的配置文件非常簡單!今天就來聊聊。
配置文件格式
SpringBoot支持兩種配置文件.properties
配置文件和.yml
配置文件,雖然官方號稱是推薦.yml
配置文件,但是我實際看到的還是以.properties
配置文件居多點。
這兩種格式其實沒有本質區別.properties
文件使用.
分割語義,而.yml
文件使用縮進
分割意義(有點像Python哈哈)。
所以我們只要掌握了一種配置,就可以翻譯爲另一種配置。例如配置項目啓動端口。
# .properties文件配置方法
server.port=1007 #啓動端口設置爲1007
# .yml配置方法
server:
port: 1007 #務必注意冒號後面要有個空格 不然不生效哈
注意,SpringBoot項目啓動時加載的配置文件名默認爲application.properties
或application.yml
,不建議老鐵你同時建立這兩個文件,純屬閒的沒事找事。
TIPS SpringBoot2.x中可以使用
server.servlet.context-path=/xxx
配置項目的訪問路徑,而SpringBoot1.x中配置方法爲server.context-path=/xxx
,不知道爲啥搞得不一樣了,不向前兼容是很煩的一件事!
自定義配置項
可以自定義一些配置項,然後在項目中直接使用,例如我們通常會習慣將微信公衆號相關的參數放到配置文件中便於修改,而不是寫死到代碼中,每次修改還得重新編譯程序。
# 配置端口
server.port=1007
# 公衆號的appid
wxmp.appid=111
# 公衆號的secret
wxmp.secret=222
然後注入到組件中,這樣容器在啓動時就可以將配置內容注入組件。
/**
* 微信公衆號參數
*/
@Component//註冊爲組件
public class WxMpParam {
@Value("${wxmp.appid}")//注入wxmp.appid配置項
private String appid;
@Value("${wxmp.secret}")//注入wxmp.secret配置項
private String secret;
}
指定對象綁定配置
如下同樣生效,注意@Data不能省略
/**
* 微信公衆號參數
*/
@Component//註冊爲組件
@EnableConfigurationProperties//啓用配置綁定組件功能
@ConfigurationProperties(prefix="wxmp")//指定組件綁定的前綴
@Data//需要開啓get/set,以便注入
public class WxMpParam {
private String appid;//自動匹配到wxmp.appid
private String secret;//自動匹配到wxmp.secret
}
在配置文件中使用隨機數
配置文件中使用隨機數也是比較常見的場景,尤其啓動多個客戶端時,希望指定一個啓動端口的範圍,例如10-20,可配置如下:
# 配置端口爲1-20間的隨機數
server.port=${random.int[10,20]}
這樣我可以連續啓動四個客戶端,啓動端口分別爲:12、13、17、19,可見是隨機的,而且在我指定的範圍內波動。
自定義配置文件
有時候參數太多,都放到一個配置文件中太亂了,我們會希望將配置分到不同文件中,然後每個文件保存不同配置。
例如上面微信公衆號配置,我們單獨摘出來,放到wxmp.properties中。
# wxmp.properties
# 公衆號的appid
wxmp.appid=111
# 公衆號的secret
wxmp.secret=222
讓我們在組件注入時代碼如下:
/**
* 微信公衆號參數
*/
@Component // 註冊爲組件
@PropertySource(value = "classpath:wxmp.properties", encoding = "utf-8") // 指定配置文件及編碼
public class WxMpParam {
@Value("${wxmp.appid}")
private String appid;
@Value("${wxmp.secret}")
private String secret;
}
當然我們也可以結合綁定對象的語法,修改如下:
/**
* 微信公衆號參數
*/
@Component//註冊爲組件
@EnableConfigurationProperties//啓用配置綁定組件功能
@ConfigurationProperties(prefix="wxmp")//指定組件綁定的前綴
@PropertySource(value = "classpath:wxmp.properties", encoding = "utf-8") // 指定配置文件及編碼
@Data//需要開啓get/set,以便注入
public class WxMpParam {
private String appid;//自動匹配到wxmp.appid
private String secret;//自動匹配到wxmp.secret
}
引用配置項
Spring Boot配置項是可以引用其他配置項的值的,這個稍微提一下,例如:
# wxmp.properties
# 公衆號的appid
wxmp.appid=111
# 公衆號的secret,值爲111222
wxmp.secret=${wxmp.appid}222
總結
配置少,就直接在application.properties寫寫就完了。
配置多,就分出幾個配置文件來。
如果一個配置文件中配置項很多,也可以考慮讓配置綁定對象,免得重複寫前綴。
SpringBoot提供了足夠靈活的配置文件使用機制,讓我們靈活運用!