SpringBoot屬性配置實戰(application.properties)
Spring Boot不但繼承了Spring的強大功能,還實現了快速開發的便捷。如何實現快速開發,亮點主要在配置上,如果沒有特殊要求完全不需要任何配置,是不是很爽。
在Spring Boot使用過程中,能直觀的感受到沒了原來整合Spring應用時繁多的XML配置內容,替代它的是在pom.xml中引入模組化的Starter POMs,其中各個模組都有自己的預設配置,所以如果不是特殊應用場景,就只需要在application.properties中完成一些屬性配置就能開啟各模組的應用。
使用application.properties,一般情況下主要用來配置資料庫連線、日誌相關配置等。除了這些配置內容之外,還有哪些其他特性和使用方法?如下:
一般屬性使用
自定義屬性使用
屬性間的引用(佔位符)
隨機數的使用
資料型別自動轉換
巢狀屬性注入
一般屬性使用
應用的配置檔案可以使用application.properties也可以使用application.yml
application.properties
spring.application.name=compute-service
server.port=80
server.tomcat.uri-encoding=GBK
application.yml
spring:
application:
name: compute-service
server:
port: 80
server:
tomcat:
uri-encoding: GBK
以上屬性一般都會被SpringBoot框架直接使用;
注意:使用.yml時,屬性名的值和冒號中間必須有空格,如port: 80正確,port:80就是錯的。
自定義屬性使用
在使用Spring Boot的時候,通常也需要定義一些自己使用的屬性,如下方式直接定義:
com.test.name=Tom
com.test.password=123456
然後通過@Value(“${屬性名}”)註解來載入對應的配置屬性,具體如下:
public class MyProperties {
@Value("${com.test.name}")
private String name;
@Value("${com.test.password}")
private String password;
}
屬性間的引用(佔位符)
app.name=MyApp
app.description=${app.name} is a Spring Boot application
server.port=${port:8080}
可以在配置檔案中引用前面配置過的屬性(優先順序前面配置過的這裡都能用);
通過如${app.name:預設名稱}方法還可以設定預設值,當找不到引用的屬性時,會使用預設的屬性,如當port屬性不存在時會預設使用8080.
隨機數的使用
在一些情況下,有些引數我們需要希望它不是一個固定的值,比如金鑰、服務埠等。Spring Boot的屬性配置檔案中可以通過${random}來產生int值、long值或者string字串,來支援屬性的隨機值。
# 隨機字串
com.test.value=${random.value}
# 隨機int
com.test.number=${random.int}
# 隨機long
com.test.bignumber=${random.long}
# 10以內的隨機數
com.test.test1=${random.int(10)}
# 10-20的隨機數
com.test.test2=${random.int[10,20]}
random.int*支援value引數和,max引數,當提供max引數的時候,value就是最小值。
資料型別自動轉換
SpringBoot可以方便的將屬性注入到一個配置物件中,並實現自動資料型別轉換:
com.test.name=Isea533
com.test.port=8080
com.test.servers[0]=dev.bar.com
com.test.servers[1]=foo.bar.com
對應物件為:
@ConfigurationProperties(prefix="com.test")
public class Config {
private String name;
private Integer port;
private List<String> servers = new ArrayList<String>();
public String geName(){
return this.name;
}
public Integer gePort(){
return this.port;
}
public List<String> getServers() {
return this.servers;
}
}
上面的程式碼會自動將prefix=”com.test” 字首為com.test 的屬性注入進來,並會自動轉換型別,當使用List 的時候需要注意在配置中對List 進行初始化!
巢狀屬性注入
SpringBoot還支援巢狀屬性注入:
name=Tom
jdbc.username=root
jdbc.password=root
對應的配置類:
@ConfigurationProperties
public class Config {
private String name;
private Jdbc jdbc;
class Jdbc {
private String username;
private String password;
//getter...
}
public Integer gePort(){
return this.port;
}
public Jdbc getJdbc() {
return this.jdbc;
}
}
jdbc開頭的屬性都會注入到Jdbc物件中。