首页 > 解决方案 > 在其他未激活的情况下激活弹簧轮廓

问题描述

在我的基于 spring profile rabbitmq 或 oracle jms queues 的应用程序中可以使用。当前,一个由一个配置文件激活,另一个由第二个配置文件激活。但它有它的缺点。也就是说,如果您忘记激活配置文件应用程序将无法工作。我想要实现的是一种默认配置文件。因此,如果没有oracle-jms配置文件处于活动状态,则默认使用兔子队列。我知道我可以像这样对 bean 使用配置文件否定:

@Profile("oracle-jms")
@Configuration
public class OracleJmsConfiguration {
    ...
}

@Profile("!oracle-jms")
@Configuration
public class RabbitMQConfiguration {
    ...
}

但是,尽管它适用于 bean,但它迫使我将 Rabbit 配置属性保留在 main 中,application.yml而不是像application-rabbitmq.yml. 我知道 Rabbit 将被更频繁地使用,并且在主文件中保留其默认值并不是最糟糕的选择,但我仍然想知道是否有可能在未激活rabbitmq时采取一些技巧来激活配置文件。oracle-jms

标签: javaspring

解决方案


您可以使用EnvironmentPostProcessor

首先创建实现 EnvironmentPostProcessor 的类

public final class DefaultEnv implements EnvironmentPostProcessor {
    @Override
    public void postProcessEnvironment(final ConfigurableEnvironment environment, final SpringApplication application) {
        final String[] activeProfiles = environment.getActiveProfiles();
        if (activeProfiles.length == 0) {
            environment.setActiveProfiles("rabbitmq");
        }
    }
}

其次创建以下文件

/resource/META-INF/spring.factories

在这个文件中写下这一行

org.springframework.boot.env.EnvironmentPostProcessor = com.pack.DefaultEnv

也就是说,在创建上下文之前,spring 会调用这个 DefaultEnv 类并设置 rabbit 环境。


推荐阅读