使用Spring Boot 2.2+,当应用程序未在Cloud Platform上运行时如何创建Bean

时间:2020-07-28 02:44:55

标签: java spring spring-boot

在Spring Boot 2.2中,有一个注释@ConditionalOnCloudPlatform,可用于检测应用程序是否在Cloud Platform上运行。

我遇到了相反的问题-我不想运行在Cloud Platform上运行的bean。例如,我有一些代码不想在Kubernetes上运行时运行(因为运行Kubernetes的平台已经提供了给定bean中的功能)。

执行此操作的最佳方法是什么?我觉得我需要@ConditionalOnCloudPlatform注解。

谢谢。

2 个答案:

答案 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() {}