在基于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
个人资料未激活。
答案 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
添加到application.properties:
spring.profiles.active=rabbitmq
它将激活“ rabbitmq”配置文件。
您可以通过以下方式覆盖它:
-Dspring.profiles.active=oracle-jms