簡體   English   中英

Spring 通過配置文件的組合選擇屬性源

[英]Spring choose property source by a combination of profiles

我有多個由 Spring 配置文件驅動的環境,例如application-int.ymlapplication-dev.yml等具有類似內容:

  • application-int.yml
     ws: endpoint: http://my-soap-int-endpoint.com/ mock: http://my-soap-int-mock-endpoint.com/
  • application-dev.yml
     ws: endpoint: http://my-soap-dev-endpoint.com/ mock: http://my-soap-dev-mock-endpoint.com/

我的目標是使用基於這兩個環境的名稱以及是否以下屬性mock配置文件包括:

  • ws.endpointapplication-dev.ymldev概況
  • ws.endpointapplication-int.ymlint型材
  • ws.mockapplication-dev.yml用於dev mock曲線
  • ws.mockapplication-int.ymlint mock曲線

我需要將該值解析為單個變量url

@Configuration
public class SoapConfiguration {

    @Value("???")                  // based on 2 properties
    private String wsUrl;
}

我想避免基於@Profile的抽象配置類的復雜層次結構。 此外,我需要將兩個變量(模擬和非模擬)保存在一個公共屬性文件中。

有沒有一種既可讀又可維護的好方法?

您可以在構造函數中設置wsUrl 這不是那么優雅的解決方案,但它有效。 Environment bean 注入您的SoapConfiguration並檢查mock配置文件是否處於活動狀態。
代碼示例:

@Configuration
public class SoapConfiguration {
    private final String wsUrl;

    public SoapConfiguration(Environment environment) {
        if (Arrays.asList(environment.getActiveProfiles()).contains("mock")) {
            this.wsUrl = environment.getProperty("ws.mock");
        } else {
            this.wsUrl = environment.getProperty("ws.endpoint");
        }
    }
}

暫無
暫無

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

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