Spring 通过配置文件组合选择 属性 来源
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
。此外,我需要将 both 变量(模拟和非模拟)保存在一个公共 属性 文件中。
有没有既可读又可维护的好方法?
您可以在构造函数中设置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");
}
}
}
我有多个由 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
。此外,我需要将 both 变量(模拟和非模拟)保存在一个公共 属性 文件中。
有没有既可读又可维护的好方法?
您可以在构造函数中设置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");
}
}
}