多个实例的Spring Boot Solr配置

问题描述 投票:0回答:1

几次以前,我的任务是在同一个应用程序中使用两个独立的Apache Solr实例。我试图找到一些信息,但无济于事。本文介绍如何配置对多个独立Apache Solr的访问,并使用Spring Data通过不同的存储库访问它们。

Solr配置

您需要为每个Solr配置一个独立的配置。例如:

    @Configuration
    @EnableSolrRepositories(basePackages = {"com.project.repository.first"},
            solrClientRef = "firstSolrClient",
            solrTemplateRef = "firstSolrTemplate")
    public class FirstSolrConfig {

        @Value("${solr.first.url}")
        private String solrHost;

        @Bean
        public SolrClient solrClient() {
            return new HttpSolrClient.Builder(solrHost).build();
        }

        @Bean("firstSolrTemplate")
        public SolrTemplate solrTemplate() {
            return new SolrTemplate(this::solrClient);
        }

    }

-

@Configuration
@EnableSolrRepositories(basePackages = {"com.project.repository.second"},
        solrClientRef = "secondSolrClient",
        solrTemplateRef = "secondSolrTemplate")
public class SecondSolrConfig {

    @Value("${solr.second.url}")
    private String solrHost;

    @Bean("secondSolrClient")
    public SolrClient solrClient() {
        return new HttpSolrClient.Builder(solrHost).build();
    }

    @Bean("secondSolrTemplate")
    public SolrTemplate solrTemplate() {
        return new SolrTemplate(this::solrClient);
    }

}

第一个配置的SolrClient Bean必须有“solrClient”名称!否则,您将无法引发Spring Context。您需要将存储库放在不同的包中。

这只是我为这个案子找到的工作方式。

java apache spring-boot solr
1个回答
0
投票

今天我遇到了同样的问题。看起来solrClientRef = "secondSolrClient"不再起作用了。没有进入我可以告诉的细节,这个功能被删除或可能移动与此commit。现在我无法想出另一个解决方案,所以我坚持

至少有一个名为solrClient的Bean必须存在

这是一些代码,说明了我的工作解决方案:

@Configuration
@EnableSolrRepositories(solrTemplateRef = "firstSolrTemplate")
@EntityScan
@ComponentScan
public class FirstSolrConfiguration {

    @Bean("firstSolrClient")
    public SolrClient firstSolrClient(@Qualifier("firstSolrCredentialsProvider") final CredentialsProvider credentialsProvider) {
        //
    }

    @Bean
    @ConditionalOnMissingBean(name = "solrClient")
    public SolrClient solrClient(@Qualifier("firstSolrCredentialsProvider") final CredentialsProvider credentialsProvider) {
        //
    }

    @Bean("firstSolrTemplate")
    public SolrTemplate solrTemplate() {
        //
    }

}

我的第二个连接也有第二个配置。

© www.soinside.com 2019 - 2024. All rights reserved.