Конфигурация Spring Boot Solr для нескольких экземпляров - PullRequest
0 голосов
/ 29 января 2019

Несколько раз назад у меня была задача использовать два независимых экземпляра Apache Solr в одном приложении.Я пытался найти некоторую информацию, но безрезультатно.Эта статья о том, как настроить доступ к нескольким независимым Apache Solr и получить к ним доступ через различные репозитории с помощью Spring Data.

Solr config

Вам необходимо иметь независимую конфигурациюдля каждого 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.Вы должны поместить свои репозитории в разные пакеты.

Это единственный способ, который я нашел для этого случая.

1 Ответ

0 голосов
/ 29 апреля 2019

Сегодня я столкнулся с той же проблемой.Похоже, solrClientRef = "secondSolrClient" больше не работает.Не вдаваясь в детали, я могу сказать, что эта функция была удалена или, вероятно, перемещена с этим коммитом .Пока я не смог придумать другое решение, поэтому я придерживаюсь

хотя бы один Бин с именем solrClient должен существовать

Вот код, иллюстрирующий мое рабочее решение:

@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() {
        //
    }

}

У меня также есть вторая конфигурация для моего второго соединения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...