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=true
Bean 宣言をオーバーライドしたくないので、これは答えではありません。
ベストアンサー1
または、次のプロパティを に追加することもできますapplication.properties
。
spring.main.allow-bean-definition-overriding=true