【问题标题】:Spring Data Solr repositories using JavaConfig使用 JavaConfig 的 Spring Data Solr 存储库
【发布时间】:2016-11-23 17:05:53
【问题描述】:

我正在尝试创建一个使用 solr 存储库的 SpringBoot 应用程序。我正在学习本教程:

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,所以这不是一个好的选择...

【问题讨论】:

  • 你的 pom 中“spring-boot-starter-data-solr”的版本是什么。
  • @ShivaKumarSS 没有指定版本,所以我猜它需要最新的。

标签: java spring maven solr


【解决方案1】:

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

由于EmbeddedSolrServer是对SolrClient的扩展,遵循JavaIS-A的关系,应该兼容SolrClient。这个二进制文件是 solr-core 的一部分。

您的代码需要使用getSolrClient 本身并且它应该与SolrClient 兼容

pom.xml中的依赖如下

我们的代码库没有任何错误。

【讨论】:

  • 刚刚用 pom.xml 条目编辑了我的答案。你能试试吗?
  • 现在,通过使用您建议的版本,我有方法getSolrServer,但它给了我一个错误,因为SolrTemplate 不需要SolrClient
  • 我刚刚用代码 sn-p 编辑了我的答案。请检查。
  • 有了你的配置,我没有getSolrClient的方法,只有getSolrServer
  • 如果您有 spring-data-solr 依赖项,请删除它。确保您只有答案中提到的那些依赖项。
【解决方案2】:

不是创建 SolrClient bean,而是创建 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>

有关此主题的更多信息,您可以在 Petri Kainulainen 的此博客中找到 here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-09-15
    • 1970-01-01
    • 2013-08-23
    • 1970-01-01
    • 1970-01-01
    • 2012-11-25
    • 1970-01-01
    相关资源
    最近更新 更多