我有多个由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");
}
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句