1. 程式人生 > >SpringBoot屬性配置實戰(application.properties)

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物件中。