在spring boot中,我们可能会排除特定的自动配置类,以免永远不会应用它们。基于注释的配置示例:
@SpringBootApplication(exclude = OneConfiguration.class)
我想要的是提供一个环境变量,其值将决定一些将被排除的自动配置。任何想法如何实现?
答案 0 :(得分:2)
创建扩展环境变量的Condition
检查值的类:
public class AutoConfigurationCondition extends Condition {
@Override
public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
return System.getenv("EXCLUDE").equals("yes");
}
}
然后你可以在Configuration
class:
@Configuration
@Conditional(AutoConfigurationCondition.class)
@EnableAutoConfiguration(exclude = {OneConfiguration.class})
class AutoConfigurationExcludingConf {}
答案 1 :(得分:2)
您可以默认排除此配置类:
@SpringBootApplication(exclude = OneConfiguration.class)
然后将其扩展并使其视情况而定:
@Configuration
@ConditionalOnProperty(name = "one.configuration.condtion", havingValue = "some-value")
public class OneConfigurationConditional extends OneConfiguration { }
答案 2 :(得分:1)
我设法用个人资料做了我想要的事情:-(所以我现在几乎没有文件 - 例如application-artemis.yaml
和application-activemq.yaml
。我在每个文件中都定义了相应的spring.autoconfigure.exclude
{{3我对这个解决方案并不感到自豪,虽然它到目前为止工作得很好,与我做的其他事情相比看起来或多或少整洁:-)。
除此之外我还尝试过:
spring: autoconfigure: exclude: ${ABC:com.example.Myautoconfiguration}
这不起作用,我甚至将其报告为property。但似乎我不能依赖表达这个属性。奇怪的是它适用于其他属性......
我已经开始讨论@Randal Flagg的建议但不知何故我无法启动并运行 - 我正在使用@SpringBootApplication
,文档说我只能使用EnableAutoConfiguration一次等等。
我尝试使用自己的TypeFilter
,但这也不是一个选项 - 自动配置在组件扫描期间有特殊处理,并且设计在那里看起来似乎不太可扩展。至少我找不到一个很好的插件方式。