簡體   English   中英

我正在使用 @PropertySource 和 @ConfigurationProperties 的組合,但我想用外部屬性文件覆蓋它們

[英]I am using a combination of @PropertySource and @ConfigurationProperties but I want to overwrite them with an external properties file

我已經建立了一個彈簧啟動項目。

在其中,我有一個如下所示的屬性類:

@Configuration
@PropertySource(value = "classpath:abc.properties")
@ConfigurationProperties
public class ABCProperties {

    private Map<String, String> someUrls;

    @Bean
    public Map<String, String> someUrls() {
        return someUrls;
    }

    public Map<String, String> getSomeUrls() {
        return someUrls;
    }

    public void setSomeUrls(Map<String, String> someUrls) {
        this.someUrls = someUrls;
    }
}

abc.properties 文件的內容如下所示:

someUrls.urlA=someURL
someUrls.urlB=someOtherURL

在項目中的資源文件夾(和測試資源文件夾)中,我提供了一個 abc.properties 文件。 構建並運行后,程序可以按預期訪問 abc.properties 文件中的屬性(也可以在測試中正確訪問) - 它們很好地映射到我的 url 映射。

到目前為止一切順利。

但是,我在屬性類中所指的 URL 並不總是相同的。 在某些部署中,我想覆蓋它們。 使用在我的 application.properties 文件中指定的屬性,這很容易; 只需在我運行應用程序的同一個(根)文件夾中放置另一個外部 application.properties 文件,就會自動覆蓋我放入其中的任何屬性。

我想要做的是有時也在應用程序的根文件夾中放置一個外部 abc.properties 文件,並讓它以相同的方式覆蓋 abc.properties 屬性。 當然,我試過這個,但是jar內置的 abc.properties 文件中的屬性被保留而不是被覆蓋。 事實上,我不確定 spring boot 程序是否識別出它的根文件夾中還有另一個外部 abc.properties 文件。

我似乎無休止地閱讀了關於如何在沒有成功的情況下實現這一目標。 我還嘗試在我的 application.properties 中指定以下內容,但沒有任何區別(即使它確實有效,也不理想,因為我不想在所有情況下都指定直接路徑)。

spring.config.location=/path/to/application/root/
spring.config.name=abc.properties

如果我不得不猜測,問題是在屬性類中我指向“類路徑:..”,而外部文件實際上不在類路徑上,因為它是......很好的外部文件。

但是spring boot 知道如何在它的根應用程序文件夾中查找覆蓋 application.properties 所以我希望它也能夠查找其他屬性文件來覆蓋? 我只是無法理解如何實現這一目標。

是的,我特別希望我的屬性在這個 abc.properties 文件中,而不是在應用程序屬性中。

你有沒有研究過PropertySources

@PropertySources({
    @PropertySource("classpath:abc.properties"),
    @PropertySource(value="file:abc.properties", ignoreResourceNotFound=true)
})

從他們的文檔:

如果給定的屬性鍵存在於多個 .properties 文件中,則最后處理的 @PropertySource 注釋將“獲勝”並覆蓋。

基本上你在這里說的是:從類路徑加載 abc.properties,但也從這個外部位置加載 abc.properties,如果沒有找到它就忽略后者。 它應該覆蓋您在外部文件中聲明的屬性。

沒有測試過,所以希望它有效。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM