Spring Boot 的配置文件屬性注入

簡介:

在 Spring Boot 中,配置文件有兩種不同的格式,一個是 properties ,另一個是 yaml 。

yaml 更加簡潔明, 數據有序;而properties 中的數據是無序

但是,yaml配置目前不支持@PropertySource註解

對於 application.properties 而言,它不一定非要叫 application ,但是項目默認是去加載名爲 application 的配置文件,如果我們的配置文件不叫 application ,也是可以的,但是,需要明確指定配置文件的文件名。

普通的屬性注入

由於 Spring Boot 源自 Spring ,所以 Spring 中存在的屬性注入,在 Spring Boot 中一樣也存在。由於 Spring Boot 中,默認會自動加載 application.properties 文件,所以簡單的屬性注入可以直接在這個配置文件中寫

public class Book {
    private Long id;
    private String name;
    private String author;
    //省略 getter/setter
}

然後,在 application.properties 文件中定義屬性 

book.name=三國演義
book.author=羅貫中
book.id=1

按照傳統的方式(Spring中的方式),可以直接通過 @Value 註解將這些屬性注入到 Book 對象中:

@Component
public class Book {
    @Value("${book.id}")
    private Long id;
    @Value("${book.name}")
    private String name;
    @Value("${book.author}")
    private String author;
    //省略getter/setter
}

注意

Book 對象本身也要交給 Spring 容器去管理,如果 Book 沒有交給 Spring 容器,那麼 Book 中的屬性也無法從 Spring 容器中獲取到值。

配置完成後,在 Controller 或者單元測試中注入 Book 對象,啓動項目,就可以看到屬性已經注入到對象中了。

一般來說,我們在 application.properties 文件中主要存放系統配置,這種自定義配置不建議放在該文件中,可以自定義 properties 文件來存在自定義配置。

例如在 resources 目錄下,自定義 book.properties 文件,內容如下:

book.name=三國演義
book.author=羅貫中
book.id=1

如果是在 Java 配置中,可以通過 @PropertySource 來引入配置:

@Component
@PropertySource("classpath:book.properties")
public class Book {
    @Value("${book.id}")
    private Long id;
    @Value("${book.name}")
    private String name;
    @Value("${book.author}")
    private String author;
    //getter/setter
}

當項目啓動時,就會自動加載 book.properties 文件。

這只是 Spring 中屬性注入的一個簡單用法,和 Spring Boot 沒有任何關係。

類型安全的屬性注入

Spring Boot 引入了類型安全的屬性注入,如果採用 Spring 中的配置方式,當配置的屬性非常多的時候,工作量就很大了,而且容易出錯。

使用類型安全的屬性注入,可以有效的解決這個問題

@Component
@PropertySource("classpath:book.properties")
@ConfigurationProperties(prefix = "book")
public class Book {
    private Long id;
    private String name;
    private String author;
    //省略getter/setter
}

這裏,使用@PropertySource指定自定義配置文件名稱,引入 @ConfigurationProperties(prefix = “book”) 註解,並且配置了屬性的前綴,配置文件中後綴與對象屬性名稱保持一致,此時會自動將 Spring 容器中對應的數據注入到對象對應的屬性中,就不用通過 @Value 註解挨個注入了,減少工作量並且避免出錯。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章