1. 程式人生 > >Springboot引用外部配置檔案

Springboot引用外部配置檔案

現在的專案越來越多的都是打包成jar執行尤其是springboot專案,這時候配置檔案如果一直放在專案中,每次進行簡單的修改時總會有些不方便,這裡我們看下打包成jar之後,從外部配置檔案中讀取配置資訊。

首先想到的是通過java程式碼讀取外邊某個路徑下的檔案,但是開始做之後發現好多問題。後來又找其它解決方案,正好搜到一種簡單的解決方式:

java -jar demo.jar --Dspring.config.location=myapplication.properties

這樣就可以通過@value註解讀取myapplication.properties中的配置資訊了。(上邊的大寫D好像可以不寫的)

後來想著直接把spring.config.location寫到application.properties配置檔案中,然後指定一個固定的外部配置檔案來獲取資訊,這樣啟動的時候就可以不用加最後一行了。

spring.config.location=C:\\Users\\Administrator\\git\\Display\\host.properties

可是這種方式是行不通的,比如我配置檔案中有下面資訊:

myname=hellopangkunkun

程式碼:

    @Value("${myname}")
    private String name;

我在啟動的時候直接報這個地方的錯誤,說是無法找到myname,導致整個專案出異常。

後來搜了下文章,對比官網文件,又得到了一些資訊:

24.3 Application property files
SpringApplication will load properties from application.properties files in the following locations and add them to the Spring Environment:

A /config subdirectory of the current directory.
The current directory
A classpath /config package
The classpath root
The list is ordered by
precedence (properties defined in locations higher in the list override those defined in lower locations).

這裡說了四種方式可以把配置檔案放到外部的。
第一種是在jar包的同一目錄下建一個config資料夾,然後把配置檔案放到這個資料夾下;
第二種是直接把配置檔案放到jar包的同級目錄;
第三種在classpath下建一個config資料夾,然後把配置檔案放進去;
第四種是在classpath下直接放配置檔案。

這四種方式的優先順序是從一到四一次降低的。

注: 一二兩種方案其實不是jar包的同級目錄,而是(執行啟動指令的)同級目錄。為了便於理解我把上面的當前目錄說成jar包的同級目錄,這種說法並不對。如果是剛開始接觸或者除錯這塊,還是在jar包同級目錄方便。

由於我們是要從外部讀取檔案,所以直接說前兩種。

看下檔案目錄結構:
這裡寫圖片描述

這裡的application.properties是我們的配置檔案,config是建立的另外一個目錄,放的也是application.properties。

Display-1.0-SNAPSHOT.jar中可以包含application.properties配置檔案也可以不包含。

為了驗證可以在config中設定myname=name1,jar同級目錄中設定myname=name2,如果jar中包含配置檔案,將其中設定成myname=name3。

直接使用指令啟動:

java -jar Display-1.0-SNAPSHOT.jar

之後驗證可得知,我們通過@Value(“${myname}”)獲取到的myname的值是name1,把config下的配置檔案刪除後獲取的結果是name2,都刪除後才會獲取jar包中配置檔案的資料name3。

另外如果我們想要想配置測試、開發、生產環境一樣使用另外一個配置檔案怎麼來實現呢?

下面繼續,我把application.properties的資訊修改如下:

spring.profiles.active=dev,host

配置檔案目錄結構:
這裡寫圖片描述
我又新增了一個名為application-host.properties的配置檔案,同理也可以把這個檔案考出來放到jar包外面,同級目錄或者config下。

這樣專案啟動之後dev配置檔案和host配置檔案都會生效。
這裡寫圖片描述
這裡為了突出其他的配置檔案我只把host的拷出來了,dev的還是在jar包裡,application.properties配置檔案放在jar中也一樣,我們需要的主要是host的配置檔案。

這樣每次修改的時候只需要修改配置檔案資訊,然後重啟專案就好,不需要重新打包。

如果想要只修改配置檔案,不重啟專案就能生效,可以考慮用java來讀取配置檔案中的資料,把它當作一個普通檔案來讀取,或者寫到其他資料庫中也行。上面這些方案已經能夠滿足我的需求了,所以其他的不在做了。

最後提個問題,也是我沒弄明白的,希望知道的各位能夠給個答案:

我把spring.config.location這個配置寫到配置檔案中為什麼沒有生效?

相關推薦

Springboot引用外部配置檔案

現在的專案越來越多的都是打包成jar執行尤其是springboot專案,這時候配置檔案如果一直放在專案中,每次進行簡單的修改時總會有些不方便,這裡我們看下打包成jar之後,從外部配置檔案中讀取配置資訊。 首先想到的是通過java程式碼讀取外邊某個路徑下的檔案,

Springboot @ConditionalOnResource 解決無法讀取外部配置檔案問題

前言 最近在開發儲存層基礎中介軟體的過程中,使用到了@ConditionalOnResource這個註解,使用該註解的目的是,註解在Configuration bean上,在其載入之前對指定資源進行校驗,是否存在,如果不存在,丟擲異常;該註解支援傳入多個變數,但

springboot啟動讀取外部配置檔案

springboot啟動讀取外部配置檔案   有時候專案打包成一個jar 或者war ,通過java -jar 命令執行springboot 專案,因為springboot 專案有自己的application.properties 配置檔案,但是我們打完包之後,它也會打到包裡邊,倒是也能開啟壓縮包修

SpringBoot 打包為war包啟動時匯入外部配置檔案

最近在做一個SpirngBoot的專案,要求伺服器部署的時候使用tomcat啟動war包的時候需要匯入一個指定位置的application.properties檔案。在網上查找了相關的問題之後,發現大部分都是基於jar包的,同樣的方法war包下並不適用。 後來

Spring配置檔案中如何使用外部配置檔案配置資料庫連線

版權宣告:本文為博主原創文章,歡迎指正或者轉載。 https://blog.csdn.net/qq_38663729/article/details/78821258 直接在spring的配置檔案中applicationContext.xml檔案中配置資料庫連線也可以,但是有個問題,需要在url

maven+IDEA+jar包讀取外部配置檔案

1、工程結構如下 src是jar的原始碼路徑,如果jar要讀取和它同一級目錄下的conf資料夾下的配置檔案就在src同一級目錄下建立一個conf資料夾 裡面放上配置檔案就可以了 2、測試程式碼如下

springboot專案靈活化配置檔案的各種ip埠

事件起源,公司的測試每次打包都需要開發幫忙打包,然而每次打包呢,開發這邊都得把mysql的ip,memcached的ip等各種ip先修改成測試想要的再打包,這樣肯定麻煩啊。後來測試就想能不能把這調整一下,省的麻煩。後來,當然是靈感一閃啦...... 我想著就是把各個寫死的ip,用一個公共變數替代

SpringBoot學習_配置檔案的載入位置

spring boot 啟動會掃描以下位置的application.properties或者 application.yml檔案作為Spring boot的預設配置檔案 file:./config/:檔案路徑下的config資料夾 file:./:檔案路徑下 clas

SpringBoot學習_配置檔案佔位符

文章目錄 隨機數 佔位符獲取之前配置的值,如果沒有可以用:指定預設值 隨機數 ${random.value}、${random.int}、${random.long} ${random.int(10)}、${random.

springboot三種配置檔案上傳下載大小的配置

配置檔案為application.yml格式: spring: http: multipart: enabled: true max-file-size: 30MB max-request-size: 30MB第二種: package com.haiyiso

SpringBoot原始碼分析 配置檔案的載入原理和優先順序

從SpringBoot原始碼分析 配置檔案的載入原理和優先順序 本文從SpringBoot原始碼分析 配置檔案的載入原理和配置檔案的優先順序     跟入原始碼之前,先提一個問題:   SpringBoot 既可以載入指定目錄下的配置檔案獲取配置項,也可

java w3c解析xml檔案,獲取指定節點內容,讀取外部配置檔案

原始碼: package com.ys.adage.utils; import com.ys.adage.message.CodeObjectResult; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.

Sprng Boot專案如何讀取外部配置檔案

springboot啟動讀取外部配置檔案   有時候專案打包成一個jar 或者war ,通過java -jar 命令執行springboot 專案,因為springboot 專案有自己的application.properties 配置檔案,但是我們打完包之後,它也會打到包裡邊,倒是也能開啟壓縮包修

用maven按環境打包SpringBoot的不同配置檔案

利用maven按環境打包SpringBoot的不同配置檔案 一個應用系統需要在不同的階段以不同的配置檔案來進行部署,在開發階段需要開發時的配置檔案啟動服務,測試階段或者生產階段都是不同的配置,所以我們需要利用maven按照環境來將不同環境的配置檔案按環境打包,減少我們的維護成本。 1、在pom檔案中進行如

springboot打包與配置檔案外接

目標: 1.將普通的MAVEN JAVA工程打包成SpringBoot可執行的jar包 2.將application.yml和log4j2.xml 1.打包 SpringBoot專案打包要求將依賴的jar全部打進去,因為SpringBoot的自動配置需要用到裡面的spring.

springboot 獲取外部配置

獲取外部配置 Properties properties=new Properties() //xx.properties 絕對路徑獲取 properties.load(new FileInputStream(new File("xx.properties"))); //獲取配置 properti

spring原始碼分析(二):外部配置檔案的載入

@PropertySource 和@Profile 簡介: @PropertySource:用在類上,載入一個(*.properties)的配置檔案 @Profile:用在類或者方法上,指定元件在哪個環境的情況下才能被註冊到容器中,不指定,任何環境下都能註冊這個元件 使用案例1-

SpringBoot的yml配置檔案

1、在src\main\resources下建立application.yml配置檔案 spring: datasource: driver-class-name: com.mysql.jdbc.Driver url: jdbc:mysql://localhost:3306/t

springboot application.properties配置檔案

application.properties  #xml對映檔案路徑配置 mybatis.mapper-locations=classpath:F:com/amu/springboot/mapper/*.xml #自定義埠號 server.port=8081 #開啟日誌 d

springboot如何取配置檔案裡的值@value()

spring boot 中如何取的配置檔案application.properties中值 常用的方法有兩種: application.properties檔案:     server.prot:8083 [email protected]()方法獲取