在其他不活动的情况下激活弹簧轮廓

时间:2019-10-24 06:44:42

标签: java spring

在基于Spring概要文件的应用程序中,可以使用rabbitmq或oracle jms队列。当前,一个配置文件激活了一个配置文件,另一个配置文件激活了另一个配置文件。但是它有缺点。即,如果您忘记激活个人资料应用程序,将无法使用。我想实现的是某种默认配置文件。因此,如果没有oracle-jms配置文件处于活动状态,则默认情况下将使用兔子队列。我知道我可以在这样的bean上使用配置文件求反:

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

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

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

3 个答案:

答案 0 :(得分:1)

您可以使用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环境

答案 1 :(得分:0)

使用@ConditionalOnMissingBean,例如

@Profile("foo")
@Configuration
public class FooConfiguration {
    ...
}

@Profile("bar")
@Configuration
public class BarConfiguration {
    ...
}

@ConditionalOnMissingBean({FooConfiguration.class, BarConfiguration.class})
@Configuration
public class DefaultConfiguration {
    ...
}

还要查看@ConditionalOnMissingBean批注的javadoc,以了解如何在@Bean方法上使用它。

答案 2 :(得分:0)

您可以将spring.profiles.active添加到a​​pplication.properties:

spring.profiles.active=rabbitmq

它将激活“ rabbitmq”配置文件。

您可以通过以下方式覆盖它:

-Dspring.profiles.active=oracle-jms