Spring Boot 讀取配置內容的三種方式

蘇暮沉觴發表於2020-11-06

在實際工作中我們無法避免如何區分多環境的問題,開發環境連線的是開發環境的資料庫,測試環境連線的是測試環境的資料庫,等等,不同環境下的配置資訊是不一樣的。在使用SpringBoot時,我們可以為每個環境定義一個配置檔案,將對應配置寫在yaml或者properties中,最後通過 spring.profiles.active 來啟用對應的配置檔案。

我們往往會讀取配置檔案中的配置資訊,除了Java提供的Properties類,還可以通過另外的三種方式在 Spring Boot 中讀取配置內容:Environment@Value@ConfigurationProperties

Environment

Environment 用於管理當前的應用環境資訊,定義了獲取 Profile 的方法,同時繼承了 PropertyResolver,PropertyResolver 提供了屬性訪問的相關方法。所以我們通過 Environment 的 getProperty() 方法讀取指定配置 Key 的內容。

通過注入Environment的例項,然後呼叫 getProperty() 方法獲取對應的引數:

@RestController
public class TestApi {

    @Autowired
    private Environment environment;

    @GetMapping("/test")
    public void test() {
        String port = environment.getProperty("server.port");
        System.out.println(port);

    }
}

 @Value

在 Controller 中定義一個 port 欄位,在 port 上使用 @Value 注入當前專案的埠值,冒號後面是在無值的情況下給的預設值,避免沒配置值的報錯問題。

@RestController
public class TestApi {

    @Value("${server.port:8080}")
    private String port;

    @GetMapping("/test")
    public void test() {
        System.out.println(port);

    }
}

@ConfigurationProperties

前兩種方式都是針對某一個欄位屬性的,但是有時候我們要需要一系列相關屬性(例如資料庫的地址,埠,賬號等),我們可以使用@ConfigurationProperties將這一系列的屬性封裝到某個類中。之後在使用時注入這個類就行。

/**
* 編寫配置類
*/
@ConfigurationProperties(prefix = "server")
public class ConfigProperties {
    
    private String port;
    
    //省略get,set方法

}


@RestController
public class TestApi {

    @Autowired
    private ConfigProperties configProperties ;

    @GetMapping("/test")
    public void test() {
        System.out.println(configProperties.getPort());

    }
}

 

相關文章