成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

如何不重新編譯讓 Spring Boot 配置文件生效?

開發 前端
從 Spring Boot2.4 開始,我們也可以使用 ??spring.config.import?? 方法來導入配置文件,相比于 ??additional-location?? 配置,這個 import 導入更加靈活,可以導入任意名稱的配置文件。

今天聊一個小伙伴在星球上的提問:

圖片

問題不難,解決方案也有很多,因此我決定擼一篇文章和大家仔細說說這個問題。

1. 配置文件位置

首先小伙伴們要明白,Spring Boot 默認加載的配置文件是 application.properties 或者 application.yaml,默認的加載位置一共有五個,五個位置可以分為兩類:

從 classpath 下加載,這個又細分為兩種:

  • 直接讀取 classpath 下的配置文件,對應到 Spring Boot 項目中,就是 resources 目錄下的配置。
  • 讀取 classpath:/config/ 目錄下的文件,對應到 Spring Boot 項目中就是 resources/config 目錄下的配置。

這兩種情況如下圖:

圖片

從項目所在的當前目錄下加載,這個又細分為三種情況:

從項目當前目錄下加載配置文件。

從項目當前目錄下的 config 文件夾中加載配置文件。

從項目當前目錄下的 config 文件夾的子文件夾中加載(孫子文件夾不可以)。

這三種情況如下圖:

圖片

config 目錄下的配置文件可以被加載,config/a 目錄下的配置文件也可以被加載,但是 config/a/b 目錄下的配置文件不會被加載,因為不是直接子文件夾。

配置文件可以放在這么多不同的位置,如果同一個屬性在多個配置文件中都寫了,那么后面加載的配置會覆蓋掉前面的。例如在 classpath:application.yaml? 中設置項目端口號是 8080,在 項目當前目錄/config/a/application.yaml 中設置項目端口是 8081,那么最終的項目端口號就是 8081。

這是默認的文件位置。

如果你不想讓自己的配置文件叫 application.properties 或者 application.yaml,那么也可以自定義配置文件名稱,只需要在項目啟動的時候指定配置文件名即可,例如我想設置我的配置文件名為 app.yaml,那么我們可以在啟動 jar 包的時候按照如下方式配置,此時系統會自動去上面提到的五個位置查找對應的配置文件:

java -jar boot_config_file-0.0.1-SNAPSHOT.jar --spring.config.name=app

如果項目已經打成 jar 包啟動了,那么前面所說的目錄中,后三個中的項目當前目錄就是指 jar 包所在的目錄。

如果你不想去這五個位置查找,那么也可以在啟動 jar 包的時候明確指定配置文件的位置和名稱,如下:

java -jar boot_config_file-0.0.1-SNAPSHOT.jar --spring.config.locatinotallow=optional:classpath:/app.yaml

注意,我在 classpath 前面加上了 optional:? 表示如果這個配置文件不存在,則按照默認的方式啟動,而不會報錯說找不到這個配置文件。如果不加這個前綴,那么當系統找不到指定的配置文件時,就會拋出 ConfigDataLocationNotFoundException 異常,進而導致應用啟動失敗。

如果配置文件和 jar 包在相同的目錄結構下,如下圖:

圖片

那么啟動腳本如下:

java -jar boot_config_file-0.0.1-SNAPSHOT.jar --spring.config.locatinotallow=optional:javaboy/app.yaml

如果 spring.config.location 的配置,只是指定了目錄,那么必須以 / 結尾,例如上面這個啟動腳本,也可以按照如下方式啟動:

java -jar boot_config_file-0.0.1-SNAPSHOT.jar --spring.config.locatinotallow=optional:javaboy/ --spring.config.name=app

通過 spring.config.location 屬性鎖定配置文件的位置,通過 spring.config.name 屬性鎖定配置文件的文件名。

2. 額外位置

前面我們關于配置文件位置的設置,都是覆蓋掉已有的配置,如果不想覆蓋掉 Spring Boot 默認的配置文件查找策略,又想加入自己的,那么可以按照如下方式指定配置文件位置:

java -jar boot_config_file-0.0.1-SNAPSHOT.jar --spring.config.additional-locatinotallow=optional:javaboy/app.yaml

如果這個額外指定的配置文件和已有的配置文件有沖突,那么還是以后來者為準。

3. 位置通配符

有一種情況,假設我有 redis 和 mysql 的配置,我想將之放在兩個不同的文件夾中以便于管理,像下面這樣:

圖片

那么在項目啟動時,可以通過通配符 * 批量掃描相應的文件夾:

java -jar boot_config_file-0.0.1-SNAPSHOT.jar --spring.config.locatinotallow=optional:config/*/

使用通配符批量掃描 mysql 和 redis 目錄時,默認的加載順序是按照文件夾的字母排序,即先加載 mysql 目錄后加載 redis 目錄。

需要注意的是,通配符只能用在外部目錄中,不可以用在 classpath 中的目錄上。另外,包含了通配符的目錄,只能有一個通配符 *?,不可以有多個,并且還必須是以 */ 結尾,即一個目錄的最后部分可以不確定。

4. 導入外部配置

從 Spring Boot2.4 開始,我們也可以使用 spring.config.import? 方法來導入配置文件,相比于 additional-location 配置,這個 import 導入更加靈活,可以導入任意名稱的配置文件。

spring.config.import=optional:file:./dev.properties

甚至,這個 spring.config.import 還可以導入無擴展名的配置文件,例如我有一個配置文件,是 properties 格式的,但是這個這個配置文件沒有擴展名,現在我想將之作為 properties 格式的配置文件導入,方式如下:

spring.config.import=optional:file:/Users/sang/dev[.properties]

好啦,看完上面的內容,文章一開始的問題答案就不用我多說了吧~

責任編輯:武曉燕 來源: 江南一點雨
相關推薦

2021-09-30 06:31:12

Spring Boot配置密碼

2024-04-23 14:13:38

開發配置文件

2010-03-02 09:59:03

Fedora Make

2009-06-17 14:10:30

Spring配置文件

2022-06-23 08:42:08

配置加密解密

2009-11-13 09:40:27

linux定時執行crontab

2011-03-21 13:35:29

PHPLAMPGD庫

2024-10-10 15:08:40

2025-01-26 00:00:40

微服務架構服務

2023-11-01 08:30:20

SpringYAML

2021-08-06 08:04:14

Spring Boot自動配置

2018-12-21 09:10:51

UbuntuLinux修復損壞

2017-03-23 09:29:06

2021-11-07 14:00:16

JekyllBashAPI后端

2018-02-28 13:45:47

LinuxUnixVim

2022-04-27 08:55:01

Spring外部化配置

2010-01-13 16:34:57

VB.NET動態屬性

2011-01-13 16:27:26

Linux配置文件

2019-11-22 10:00:53

ICC配置文件Windows 10

2011-01-19 14:00:21

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 免费国产一区二区视频 | 国产日韩欧美一区 | 人人九九精 | 精品一区精品二区 | 亚洲男人天堂网 | 国产一区二区三区在线 | 欧美a在线观看 | 久久一 | 久久一二三区 | 国产xxxx搡xxxxx搡麻豆 | 欧美日韩a| 91色视频在线观看 | 欧美日韩视频一区二区 | 天天射色综合 | 久久久99精品免费观看 | 日韩激情一区 | 中文字幕一区二区三区精彩视频 | 一级黄色录像毛片 | 欧美激情一区二区三级高清视频 | 亚洲性人人天天夜夜摸 | 91精品久久久久久久久久 | 在线观看毛片网站 | 视频一区中文字幕 | 成人免费xxxxx在线视频 | 国产中文字幕在线观看 | 精品一区二区三区在线观看国产 | 黄频免费 | 精品日韩欧美一区二区 | 中文精品一区二区 | 男人天堂社区 | 亚洲国产小视频 | 中文字幕av亚洲精品一部二部 | 成人精品在线观看 | 男女羞羞视频在线 | 成人精品一区二区三区中文字幕 | 欧美精品一区在线发布 | 综合久久网 | 免费在线a视频 | 欧美成人一区二区 | 天天爽天天操 | 亚洲成人一区二区三区 |