Spring 引导云自动配置 Class 中未加载自定义 Bean

Custom Bean not loaded in Spring Boot Cloud AutoConfiguration Class

我想提供一个特定的 Bean,以便这个 Bean 覆盖 Bean在 Spring 云中 AutoConfiguration class.

先试试

因此我创建了一个配置 class:

@Configuration
public class MyLocalConfig {
  @Bean
  public ApiClient apiClient() throws IOException {
    return ClientBuilder.standard(false).build();
  }
}

使用 @Primary@Order 注释确定优先级没有帮助。

第二次尝试(编辑)

我还尝试使用 AutoConfiguration。但即使 @AutoConfigureBefore 注释也被忽略。

@Configuration
@AutoConfigureBefore(KubernetesClientAutoConfiguration.class)
public class LocalKubeAutoConfiguration {
  @Bean
  public ApiClient apiClient() throws IOException {
    return ClientBuilder.standard(false).build();
  }
}

我的 Configuration class Beans 总是实例化 [= KubernetesClientAutoConfiguration class 中的 44=]Beans。 因此 AutoConfiguration class 不使用我的 Bean.

文档说:At any point, you can start to define your own configuration to replace specific parts of the auto-configuration

问题:


这是我的其他代码:

主要Class

@SpringBootApplication
public class SpringBootAdminApp {
  public static void main(String[] args) {
    SpringApplication.run(SpringBootAdminApp.class, args);
  }
}

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.4.5</version>
        <relativePath/>
    </parent>
    <groupId>com.example</groupId>
    <artifactId>testme</artifactId>
    <version>1-SNAPSHOT</version>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-kubernetes-client-all</artifactId>
            <version>2.0.2</version>
        </dependency>
    </dependencies>
</project>

主要class 添加@SpringBootApplication(scanBasePackages = ....) 所以定制的包裹将被扫描 此注释仅告诉 spring 搜索位置。

https://www.baeldung.com/spring-component-scanning

Spring Boot Cloud 使用 Bootstrap Configuration 加载配置。

By default, bootstrap properties (not bootstrap.properties but properties that are loaded during the bootstrap phase) are added with high precedence, so they cannot be overridden by local configuration.

因此我必须添加一个 BootstrapConfiguration:

org.springframework.cloud.bootstrap.BootstrapConfiguration=\
com.demo.LocalKubeConfig

BootstrapConfiguration中的Bean会在KubernetesClientAutoConfiguration之前加载。