[英]Spring choose property source by a combination of profiles
我有多個由 Spring 配置文件驅動的環境,例如application-int.yml
、 application-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.endpoint
從application-dev.yml
的dev
概況ws.endpoint
從application-int.yml
為int
型材ws.mock
從application-dev.yml
用於dev mock
曲線ws.mock
從application-int.yml
為int 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.