java - 在其他未激活的情况下激活弹簧轮廓
问题描述
在我的基于 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
解决方案
您可以使用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 环境。
推荐阅读
- powerbi - 在高级编辑器中,如何处理 power BI 中的缺失列 / column1 not found 错误?
- ms-access - 访问功能区回调函数不能在报告内
- php - PHP MVC - 使用 URL 格式打开特定选项卡
- python - 如果它包含python中的某些字符,如何删除完整的单词
- android - Unity 奖励广告尚未准备好在 android 9 上展示
- python-3.x - 有没有办法消除嵌套循环以防止时间执行错误
- html - 如何从标题元素中删除空格?
- karate - 如何使用 KarateOptions 执行多个标签?
- http - 服务器什么时候收到http请求体?
- math - 平面绕 y 轴旋转