SpringBoot讀取外部配置檔案的方法

2022-09-20 13:39:07 字數 3741 閱讀 5425

以設定應用埠為例

server.port=80

server:

port: 80

在properties和yml/yaml配置檔案同時存在的情況下, 在同一目錄下,properties配置優先順序 > yaml(yml)配置優先順序

springboot配置檔案可以放置在多種路徑下,不同路徑下的配置優先順序有所不同。

可放置目錄(優先順序從高到低)

./config/ (當前專案路徑config目錄下);

./ (當前專案路徑下);

classpath:/config/ (類路徑config目錄下);

classpath:/ (類路徑config下).

優先順序由高到底,高優先順序的配置會覆蓋低優先順序的配置;

springboot會從這四個位置全部載入配置檔案並互補配置;

private static final string default_search_locations = "classpath:/,classpath:/config/,file:./,file:./config/";

接著getsearchlocations方法中去逗號解析成set,其中內部類loader負責這一配置檔案的載入過程,

接下來還是以埠配置為例

在resources/目錄下配置檔案設定埠為8888;

在resources/config目錄下配置檔案設定埠為9999;

在專案路徑下配置檔案設定埠為6666;

在專案路徑config目錄下配置檔案設定埠為7777;

]最終執行結果:

通過控制變數法得以論證

其優先順序由高到底,高優先順序的配置會覆蓋低優先順序的配置

springboot提供了許多的配置,但通常情況我們需要自定義自己的配置應用自己的系統中,如你需要配置乙個預設的使用者名稱密碼做為系統的登入用。

首先建立乙個實體類,作為配置注入用,並使用@configurationproperties註解進行批量注入, 也可以使用spring底層註解@value("$")的方式乙個乙個注入達到同意的效果

@component

@configurationproperties(prefix = "user")

public class login

或者@value寫法

@component

public class login

配置檔案寫法

# yml檔案寫法

user:

username: admin

password: 123

# properties寫法

login.username=admin

login.password=123

編寫乙個junit測試用例,看看配置的值是否正常注入:

@runwith(springrunner.class)

@springboottest

@autowired

private login login;

@test

public void contextloads()

}

從輸出結果上看,值已正常注入

login

@configurationproperties

@value

全量注入

支援不支援

鬆散繫結(relaxed binding)

支援不支援

spel

不支援支援

jsr303

支援不支援

鬆散繫結:駝峰命名(username)、橫幹拼接(user-name)、下劃線(user_name)之間可以互相識別繫結稱為做鬆散繫結

@configurationproperties通常用於將配置全量注入某個類中;

@value通常用於注入某一些特定配置值中;

使用@configurationproperties方式可以進行配置檔案與實體欄位的自動對映,但需要字段必須提供set方法才可以,而使用@value註解修飾的字段不需要提供set方法

org.springframework.bootgroupid>

spring-boot-configuration-processorartifactid>

trueoptional>

dependency>

需要執行一下

在sources/config下建立乙個yaml檔案命名為user.properties內容與上方user的配置一樣

login類可如下寫法

@propertysource(value = )

@component

@configurationproperties(prefix = "user")

public class login

執行一下,同樣能達到載入配置效果

同時載入多個配置問題

細心的你,會發現@propertysource註解中屬性value為乙個陣列,如果同時載入多個配置檔案,並且不同配置檔案中對同乙個屬性設定了不同的值,那麼spring會識別哪乙個呢?

帶著疑問,我們可以通過控制變數法進行測試,具體過程再在贅述。

@propertysource(value = )

結論:spring載入順序為從左到右順序載入,後載入的會覆蓋先載入的屬性值。

@bean

public static propertysourcesplaceholderconfigurer loadproperties()

執行一下,仍然可以能達到載入配置效果的

springboot提出零xml的配置,因此springboot預設情況下時不會識別專案中spring的xml配置檔案。為了能夠載入xml的配置檔案,springboot提供了@importresource註解該註解可以載入spring的xml配置檔案,通常加於啟動類上。

@importresource(value = )

public static void main(string args)

}

idea使用.properties檔案出現中文亂碼問題?

idea對.properties預設編碼為gbk,通常我們專案為utf-8編碼,這樣程式在讀取時就會出現亂碼問題;

解決方法:idea 中 開啟如下選項file->sttings->editor->fileencodings

將gbk修改為utf-8並勾選

transparent native-to ascill conversion(在執行的時候轉換成ascii碼)

SpringBoot讀取外部配置檔案

總結spring boot中文官方文件 當前目錄下的 config子目錄。當前目錄。classpath下的 config包。classpath根路徑 root springboot 版本 可以說,這個版本的確有點低。但是它能解決,兩個service 相互引用不報錯的問題。神奇,如果要是換到2.1.6...

springboot讀取外部配置檔案

無意中看見公司的專案sringboot配置檔案是放在jar包並級目錄的,而我自己部署springboot專案就是直接使用的專案打出的jar包內的配置檔案,雖然能開啟jar修改配置檔案或者打包前直接改好配置檔案再打包,但是當開發和部署的人員分職之後,會比較的麻煩。所以探索了一下外部配置檔案的方式 sp...

SpringBoot(讀取配值檔案裡面的屬性)

1 propertysource配置檔案路徑設定,在類上新增註解,如果在預設路徑下可以不新增該註解。propertysource public class testcontroller2 value屬性名,在屬性名上新增該註解 value private string myname 然後就可以使用m...