2016-11-23 137 views
1

我试图创建一个使用solr存储库的SpringBoot应用程序。我下面这个教程:使用JavaConfig的Spring Data Solr存储库

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()); 
    } 
} 

的问题是,如果我这样做,它作为factory的方法不识别getSolrServer()。事实上,如果你看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> 

无论如何,我试图改变getSolrServergetSolrClient,但返回类型,即SolrClient,现在是不兼容的。如果我尝试返回org.apache.solr.client.solrj.embedded.EmbeddedSolrServer,它给了我一个错误,因为它没有找到org.apache.solr.client.solrj.embedded ...

使用,这将是SolrTemplate不需要EmbeddedSolrServer另一个问题,所以这不是一个很好的选择..

+0

什么是你的pom中“spring-boot-starter-data-solr”的版本。 –

+0

@ShivaKumarSS没有指定版本,所以我想它需要最新的。 – nbro

回答

0

我使用的不是spring套件,假设spring套件使用最新版本spring-boot-starter-data-solr (1.4.2),并且您需要在您的pom中添加solr-core 5.x的条目。

由于EmbeddedSolrServer正在延伸SolrClient,遵循Java IS-A的关系,它应该与SolrClient兼容。这个二进制文件是solr-core的一部分。

您的代码需要使用getSolrClient本身,它应该是兼容SolrClient

依赖于pom.xml的是如下

enter image description here

在这里,我们走我们的代码库没有任何错误。

enter image description here

+0

我没有使用Spring套件,只是在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-core到你的pom.xml文件。

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

关于这个主题的更多信息,你可以在这个博客由彼得Kainulainen找到here

相关问题