Spring 通过配置文件组合选择 属性 来源

Spring choose property source by a combination of profiles

我有多个由 Spring 配置文件驱动的环境,例如具有类似内容的 application-int.ymlapplication-dev.yml 等:

我的目标是使用下面的属性基于两者环境名称是否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");
        }
    }
}