2016-11-23 3 views
1

Я пытаюсь создать приложение SpringBoot, которое использует хранилища solr. Я следую за этот учебник:Spring Data Solr репозитории с использованием JavaConfig

http://docs.spring.io/spring-data/solr/docs/current/reference/html/#solr.repositories

, который говорит, чтобы настроить мое приложение со следующим классом (пример 43):

@Configuration 
@EnableSolrRepositories 
class ApplicationConfig { 

    @Bean 
    public SolrClient solrClient() { 
    EmbeddedSolrServerFactory factory = new EmbeddedSolrServerFactory("classpath:com/acme/solr"); 
    return factory.getSolrServer(); // getSolrServer does not exist 
    } 

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

Проблема заключается в том, если я что это не признает getSolrServer() как метод от factory. Действительно, если вы посмотрите на most recent API на EmbeddedSolrServerFactory, вы не найдете этот метод, но он, по-видимому, существует в previous version того же класса.

Возможно, оно было переименовано из getSolrServer в getSolrClient, по какой-то причине, из одной версии в другую.

Вот моя зависимость в pom.xml

<dependencies> 
    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-data-solr</artifactId> 
    </dependency> 

    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-test</artifactId> 
     <scope>test</scope> 
    </dependency> 
</dependencies> 

Во всяком случае, я пытался изменить getSolrServer к getSolrClient, но типу возвращаемого значения, т.е. SolrClient, теперь несовместим. Если я пытаюсь вернуть org.apache.solr.client.solrj.embedded.EmbeddedSolrServer, он дает мне ошибку, потому что не находит org.apache.solr.client.solrj.embedded ...

Другая проблема использования этого будет то, что SolrTemplate не требует EmbeddedSolrServer, так что это не очень хороший вариант .. .

+0

Что такое версия для «spring-boot-starter-data-solr» в вашей пом. –

+0

@ShivaKumarSS Нет указанной версии, поэтому я предполагаю, что она берет последнюю. – nbro

ответ

0

Я использую eclipse not spring suite, Предполагая весенний пакет, используя последнюю версию spring-boot-starter-data-solr (1.4.2), и вам нужно добавить запись для solr-core 5.x в ваш pom.

С EmbeddedSolrServer распространяется SolrClient, следует за отношением Java IS-A и должно быть совместимо с SolrClient. Этот двоичный файл является частью solr-core.

Ваш код должен использовать getSolrClient себя, и он должен быть совместим с SolrClient

зависимостями в pom.xml выглядит следующим образом

enter image description here

Здесь мы идем с нашим без каких-либо ошибок.

enter image description here

+0

Я не использую Spring suite, просто определяя зависимости в pom.xml .. – nbro

+0

Только что отредактировал мой ответ с записями pom.xml. вы можете попробовать. –

+0

Теперь, используя версии, которые вы предлагаете, у меня есть метод 'getSolrServer', но он дает мне ошибку, потому что' SolrTemplate' не требует 'SolrClient'. – nbro

0

Вместо создания SolrClient боб, создать EmbeddedSolrServerFactoryBean объект и передать этот объект в шаблон Solr для создания SolrTemplate объекта. Вот мой конфигурационный файл:

@Configuration 
@EnableSolrRepositories(basePackages = "com.ida.*.repository") 
@Profile("dev") 
public class SolrConfigDev { 
    @Autowired 
    private Environment environment; 

    @Bean 
    public EmbeddedSolrServerFactoryBean solrServerFactoryBean() { 
     EmbeddedSolrServerFactoryBean factory = new EmbeddedSolrServerFactoryBean(); 

     factory.setSolrHome(environment.getRequiredProperty("solr.solr.home")); 

     return factory; 
    } 

    @Bean 
    public SolrTemplate solrTemplate() throws Exception { 
     return new SolrTemplate(solrServerFactoryBean().getObject()); 
    } 
} 

Кроме того, вы должны добавить Solr-ядро вам файл pom.xml.

<dependency> 
    <groupId>org.apache.solr</groupId> 
    <artifactId>solr-core</artifactId> 
    <version>5.5.3</version> 
</dependency> 

Более подробной информации об этой теме, вы можете найти here в этом дневнике Петри Кайнулайнен.