以設定應用埠為例
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...