1. 程式人生 > >是時候搞清楚 Spring Boot 的配置檔案 application.properties 了!

是時候搞清楚 Spring Boot 的配置檔案 application.properties 了!

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

雖然 properties 檔案比較常見,但是相對於 properties 而言,yaml 更加簡潔明瞭,而且使用的場景也更多,很多開源專案都是使用 yaml 進行配置(例如 Hexo)。除了簡潔,yaml 還有另外一個特點,就是 yaml 中的資料是有序的,properties 中的資料是無序的,在一些需要路徑匹配的配置中,順序就顯得尤為重要(例如我們在 Spring Cloud Zuul 中的配置),此時我們一般採用 yaml。關於 yaml ,鬆哥之前寫過一篇文章:Spring Boot 中的 yaml 配置簡介。

本文主要來看看 properties 的問題。

位置問題

首先,當我們建立一個 Spring Boot 工程時,預設 resources 目錄下就有一個 application.properties 檔案,可以在 application.properties 檔案中進行專案配置,但是這個檔案並非唯一的配置檔案,在 Spring Boot 中,一共有 4 個地方可以存放 application.properties 檔案。

  1. 當前專案根目錄下的 config 目錄下
  2. 當前專案的根目錄下
  3. resources 目錄下的 config 目錄下
  4. resources 目錄下

按如上順序,四個配置檔案的優先順序依次降低。如下:

這四個位置是預設位置,即 Spring Boot 啟動,預設會從這四個位置按順序去查詢相關屬性並載入。但是,這也不是絕對的,我們也可以在專案啟動時自定義配置檔案位置。

例如,現在在 resources 目錄下建立一個 javaboy 目錄,目錄中存放一個 application.properties 檔案,那麼正常情況下,當我們啟動 Spring Boot 專案時,這個配置檔案是不會被自動載入的。我們可以通過 spring.config.location 屬性來手動的指定配置檔案位置,指定完成後,系統就會自動去指定目錄下查詢 application.properties 檔案。

此時啟動專案,就會發現,專案以 classpath:/javaboy/application.propertie

配置檔案啟動。

這是在開發工具中配置了啟動位置,如果專案已經打包成 jar ,在啟動命令中加入位置引數即可:

java -jar properties-0.0.1-SNAPSHOT.jar --spring.config.location=classpath:/javaboy/

檔名問題

對於 application.properties 而言,它不一定非要叫 application ,但是專案預設是去載入名為 application 的配置檔案,如果我們的配置檔案不叫 application ,也是可以的,但是,需要明確指定配置檔案的檔名。

方式和指定路徑一致,只不過此時的 key 是 spring.config.name 。

首先我們在 resources 目錄下建立一個 app.properties 檔案,然後在 IDEA 中指定配置檔案的檔名:

指定完配置檔名之後,再次啟動專案,此時系統會自動去預設的四個位置下面分別查詢名為 app.properties 的配置檔案。當然,允許自定義檔名的配置檔案不放在四個預設位置,而是放在自定義目錄下,此時就需要明確指定 spring.config.location 。

配置檔案位置和檔名稱可以同時自定義。

普通的屬性注入

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

例如,現在定義一個 Book 類:

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

此時,專案啟動並不會自動的載入該配置檔案,如果是在 XML 配置中,可以通過如下方式引用該 properties 檔案:

<context:property-placeholder location="classpath:book.properties"/>

如果是在 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
}

這裡,主要是引入 @ConfigurationProperties(prefix = "book") 註解,並且配置了屬性的字首,此時會自動將 Spring 容器中對應的資料注入到物件對應的屬性中,就不用通過 @Value 註解挨個注入了,減少工作量並且避免出錯。

總結

application.properties 是 Spring Boot 中配置的一個重要載體,很多元件的屬性都可以在這裡定製。它的用法和 yaml 比較類似,關於 yaml 配置,大家可以參考 Spring Boot 中的 yaml 配置簡介 。

本文案例我已上傳到 GitHub:https://github.com/lenve/javaboy-code-samples

好了,有問題歡迎留言討論。

關注公眾號牧碼小子,專注於 Spring Boot+微服務,定期視訊教程分享,關注後回覆 Java ,領取鬆哥為你精心準備的 Java 乾貨!

相關推薦

是時候清楚 Spring Boot配置檔案 application.properties

在 Spring Boot 中,配置檔案有兩種不同的格式,一個是 properties ,另一個是 yaml 。 雖然 properties 檔案比較常見,但是相對於 properties 而言,yaml 更加簡潔明瞭,而且使用的場景也更多,很多開源專案都是使用 yaml 進行配置(例如 Hexo)。除了簡潔

Spring Boot2 系列教程(四)理解Spring Boot 配置檔案 application.properties

在 Spring Boot 中,配置檔案有兩種不同的格式,一個是 properties ,另一個是 yaml 。 雖然 properties 檔案比較常見,但是相對於 properties 而言,yaml 更加簡潔明瞭,而且使用的場景也更多,很多開源專案都是使用 yaml 進行配置(例如 Hexo)。除了簡潔

Spring Boot中注入配置檔案application.properties中的list 物件引數

例如要注入下列引數: dyn.spring.datasources[0].name=branchtadyn.spring.datasources[0].driverClassName=oracle.jdbc.OracleDriverdyn.spring.datasources[0].url=jdbc:ora

spring boot配置檔案application.yml (yml與properties檔案優缺對比)

現在我們的application.properties檔案內容是: server.port=8090   server.session-timeout=30   server.context-path=   server.tomcat.max-threads=0

Spring Boot配置檔案application.properties使用

一、配置文件配置項的呼叫 啟動後在瀏覽器直接輸入http://localhost:18080/user/test,就直接打印出配置檔案中的配置內容。 二、繫結物件bean呼叫 有時候屬性太多了,一個個繫結到屬性欄位上太累,官方提倡繫結一個物件的bea

Spring boot 配置檔案詳解 (properties 和yml )

從其他框架來看 我們都有自己的配置檔案, hibernate有hbm,mybatis 有properties, 同樣, Spring boot 也有全域性配置檔案。 Springboot使用一個全域性的配置檔案,而且配置檔案的名字是固定的。 有兩種 application.properties

spring boot 配置檔案properties,yml語法學習及屬性獲取@ConfigurationProperties和@Value

1 概述 SpringBoot使用一個全域性的配置檔案,配置檔名是固定的;當我們建立一個專案時會在resource目錄下出現一個預設的配置檔案application.properties 我們可以在裡面進行一些引數的配置,當然還有另外一種方式yml檔案application.yml(

Spring Boot配置檔案properties資料庫密碼加密

Spring Boot配置檔案資料庫密碼加密 pom新增依賴 <!-- 資料庫加密 --> <dependency> &l

Spring Boot 配置檔案 yml與properties (二)

1、配置檔案 SpringBoot使用一個全域性的配置檔案,配置檔名是固定的; •application.properties •application.yml 配置檔案的作用:修改SpringBoot自動配置的預設值;SpringBoot在底層都給我們自動配

springboot中配置檔案application.properties的理解

springboot中配置檔案application.properties的理解 前言 Spring Boot使用“習慣優於配置”(專案中存在大量的配置,此外還內建了一個習慣性的配置,讓你無需手動進行配置)的理念讓你的專案快速執行起來。所以,我們要想把Spring Boot玩的溜,就要懂得如

SpringBoot非官方教程 | 第二篇:Spring Boot配置檔案詳解

springboot採納了建立生產就緒Spring應用程式的觀點。 Spring Boot優先於配置的慣例,旨在讓您儘快啟動和執行。在一般情況下,我們不需要做太多的配置就能夠讓spring boot正常執行。在一些特殊的情況下,我們需要做修改一些配置,或者需要有自己的配置屬性。 當我們

Spring Boot配置檔案和常見操作

Spring Boot配置檔案和常見操作 Spring Boot專案釋出成jar包 Spring Boot配置方式 命令列方式 應用程式屬性檔案: application.properties 參考文獻 Sp

Spring Boot 配置檔案設定(三)

簡介 上篇我們做了一些簡單的執行檔案的配置,本篇帶領大家來認識常用的一些配置,當然了關於Spring Boot 這些配置太多太多了,如果想了解更多的話直接上官網參考一下,瞭解相關案例如本篇的配置。 application.properties配置官方指南參考。

Spring配置檔案application xml中各配置的含義

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

Spring Boot 配置檔案詳解:自定義屬性、隨機數、多環境配置

相信很多人選擇Spring Boot主要是考慮到它既能兼顧Spring的強大功能,還能實現快速開發的便捷。我們在Spring Boot使用過程中,最直觀的感受就是沒有了原來自己整合Spring應用時繁多的XML配置內容,替代它的是在pom.xml中引入模組化的Starter POMs,其中各個模組都有自己的預

SpringBoot 二 配置檔案application.properties/yml

src/main/java/resources目錄下 1.自定義屬性 提供自定義屬性的支援,這樣我們就可以把一些常量配置在這裡: 然後直接在要使用的地方通過註解@Value(value=”${config.name}”)就可以繫結到你想要的屬性上面 package com.ex

SpringBoot學習第二篇:Spring Boot配置檔案詳解

原文首發於:https://www.fangzhipeng.com/springboot/2017/07/11/springboot2-config-file/ 本文出自方誌朋的部落格 springboot採納了建立生產就緒Spring應用程式的觀點。 Spring Boot優先於配置的慣例,旨

Spring Boot配置檔案詳解-ConfigurationProperties和Value優缺點-(轉)好文

文章轉自 http://www.cnblogs.com/itdragon/p/8686554.html Spring Boot提供了兩種常用的配置檔案,分別是properties檔案和yml檔案。他們的作用都是修改Spring Boot自動配置的預設值。相對於properties檔案而言,yml檔

spring boot 配置檔案中引數的使用

自定義引數 book.name=springBoot book.author=spring @可以通過@Value 註解來載入這些自定義引數: public class Book{ @Value("${book.name}") private String name

Spring Boot配置檔案全面詳解

Spring Boot在工作中是用到的越來越廣泛了,簡單方便,有了它,效率提高不知道多少倍。Spring Boot配置檔案對Spring Boot來說就是入門和基礎,經常經常會用到,所以寫下做個總結以便日後檢視。 1.配置檔案 當我們構建完Spring Boot專案後,會在resources目錄下給我們一