几次前,我的任务是在同一应用程序中使用两个独立的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 上下文。您需要将存储库放在不同的包中。
这是我为这种情况找到的唯一工作方式。
今天我遇到了同样的问题。看起来solrClientRef = "secondSolrClient"
不再起作用了。在不涉及细节的情况下,我可以告诉,此功能已被删除或可能通过此提交而移动。目前我无法想出另一个解决方案,所以我坚持
至少必须存在一个名为
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() {
//
}
}
我的第二个连接还有第二个配置。