2017-01-18 2 views
3

При конфигурации следующегоSpring данные Solr HttpSolrClient не использует ядро ​​аннотации от объекта

@Configuration 
@EnableSolrRepositories(basePackages={"com.foo"}, multicoreSupport=true) 
public class SolrConfig { 

    @Value("${solr.host}") String solrHost; 

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

    @Bean 
    public SolrTemplate solrTemplate() { 
     return new SolrTemplate(solrClient()); 
    } 
} 

У меня есть простой объект:

@SolrDocument(solrCoreName = "core1") 
public class MyEntity implements Serializable { 

При использовании SolrTemplate для выполнения запросов, он не использует coreName аннотации на документе:

Page results = solrTemplate.queryForPage(search, MyEntity.class); 

я получаю исключение:

org.springframework.data.solr.UncategorizedSolrException: Error from server at http://localhost:8983/solr: Expected mime type application/octet-stream but got text/html. 
[..] 
Problem accessing /solr/select 
[...] 
<title>Error 404 Not Found</title> 

Изменение SolrTemplate боба на:

@Bean 
public SolrTemplate solrTemplate() { 
    return new SolrTemplate(solrClient(), "core1"); 
} 

работы

ответ

3

Парней в пружинных данных подтвердило этот ожидаемое поведение и шаблон не будет читать ядро ​​от объекта аннотации.
Таким образом, в multicoreSupport=true среде, если вы хотите использовать как хранилище и шаблон, который вы должны будете создать 2 бобов: Для репозитория базового шаблона:

@Bean 
    public SolrTemplate solrTemplate() { 
     return new SolrTemplate(solrClient()); 
    } 

и для инъекций вы будете иметь другое один:

@Bean 
    public SolrTemplate customTemplate() { 
     return new SolrTemplate(solrClient(), "core1"); 
    } 

Очевидно, что если вам не нужно multicoreSupport=true никто не нужен!

Смежные вопросы