その名前のBeanはクラスパスリソース[パス]で既に定義されており、オーバーライドは無効になっています。質問する

その名前のBeanはクラスパスリソース[パス]で既に定義されており、オーバーライドは無効になっています。質問する

Spring Data Elaticsearch (トランスポート クライアントを使用) と ESTemplate の Java 構成があります。以下は例外です:

@Configuration
@EnableElasticsearchRepositories(basePackages = "subpackage-in-this-project")
@PropertySource("file:path-to-file")
public class ESConfig {

    @Bean
    ElasticsearchTemplate elasticsearchTemplate(Client client) {
        return new ElasticsearchTemplate(client);
    }

    @Bean
    Client client() { 
// configuration of the ES client
   }

}

そして、別のプロジェクトで上記の設定を拡張する設定があります。

@Configuration
@ComponentScan("package-prefix-that-matches-packages-in-both-projects")
@EnableElasticsearchRepositories(basePackages = "subpackage-in-this-project")
@PropertySource("file:same-path-to-file-as-in-the-config-above")
public class ExtendedESConfig extends ESConfig {

    @Value("index-name")
    private String indexName;

    @Bean
    public String indexName() {
        return indexName;
    }
}

プロジェクトの依存関係を使用する 3 番目の Spring Boot アプリケーションを実行すると、ExtendedESConfigこのエラーが発生しますが、なぜこのようなエラーが発生するのかよくわかりません。この問題は、Spring Boot バージョンを 2.0.5.RELEASE から 2.2.9.RELEASE にアップグレードした後に発生し始めました。


***************************
APPLICATION FAILED TO START
***************************

Description:

The bean 'elasticsearchTemplate', defined in class path resource [my/package/ESConfig.class], could not be registered. A bean with that name has already been defined in class path resource [my/other/package/ExtendedESConfig.class] and overriding is disabled.

Action:

Consider renaming one of the beans or enabling overriding by setting spring.main.allow-bean-definition-overriding=true

2020-08-30 16:49:46 ERROR [main] org.springframework.boot.diagnostics.LoggingFailureAnalysisReporter:40 - 

私のコメントからの重要な指摘:

... 残念ながら、この ES 構成を書いて、その周りにインフラストラクチャ全体を構築したのは私ではありません。 ...

この質問の時点では、私は ExtendedESConfig を所有しておらず、変更することもできません。

spring.main.allow-bean-definition-overriding=trueBean 宣言をオーバーライドしたくないので、これは答えではありません。

ベストアンサー1

または、次のプロパティを に追加することもできますapplication.properties

spring.main.allow-bean-definition-overriding=true

おすすめ記事