在Spring Boot 2.2中,有一个注释@ConditionalOnCloudPlatform
,可用于检测应用程序是否在Cloud Platform上运行。
我遇到了相反的问题-我不想运行在Cloud Platform上运行的bean。例如,我有一些代码不想在Kubernetes上运行时运行(因为运行Kubernetes的平台已经提供了给定bean中的功能)。
执行此操作的最佳方法是什么?我觉得我需要@ConditionalOnCloudPlatform
注解。
谢谢。
答案 0 :(得分:1)
将@ ConditionalOnMissingBean
与@ ConditionalOnMissingClass
的Kubernetes bean一起使用,并带有一个bean(或相关)类之一。
答案 1 :(得分:1)
解决方案1
似乎您正在使用Spring Cloud Kubernetes
。如果是这样,当应用程序在Kubernetes中作为Pod运行时,将自动激活名为“ kubernetes”的Spring配置文件。
@Component
@Profile("!kubernetes")
public class MyLocalTestBean {}
解决方案2
使用NonNestedConditions反转条件(未验证以下代码)
class ConditionalOnNotInCloud extends NoneNestedConditions {
ConditionalOnNotInCloud() {
super(ConfigurationPhase.PARSE_CONFIGURATION);
}
@ConditionalOnCloudPlatform
static class OnCloudCondition {
}
}
@Bean
@Conditional(ConditionalOnNotInCloud.class)
public StubBean createStubBean() {}