在spring-boot-starter-data-solr中启用schemaCreationSupport

时间:2016-09-30 12:51:03

标签: java spring solr spring-boot spring-data-solr

我使用spring-boot-starter-data-solr并希望利用Spring Data Solr的schmea cration支持,如documentation中所述:

  

每当刷新应用程序上下文时,自动模式填充将检查您的域类型,并根据属性配置将新字段填充到索引中。这需要solr以Schemaless模式运行。

然而,我无法做到这一点。据我所知,Spring Boot启动器不会在 @EnableSolrRepositories 注释上启用 schemaCreationSupport 标志。所以我尝试的是以下内容:

@SpringBootApplication
@EnableSolrRepositories(schemaCreationSupport = true)
public class MyApplication {
  @Bean
  public SolrOperations solrTemplate(SolrClient solr) {
    return new SolrTemplate(solr);
  }
}

但是看看Wireshark,在通过存储库保存新实体时,我看不到对Solr Schema API的任何调用。

这是打算工作,还是我错过了什么?我使用Solr 6.2.0和Spring Boot 1.4.1。

1 个答案:

答案 0 :(得分:1)

我遇到了同样的问题。经过一些调试后,我发现了根本原因,即架构创建(或更新)根本没有发生:

通过使用@EnableSolrRepositories注释,Spring扩展会将工厂bean添加到创建存储库中使用的SolrTemplate的上下文中。此模板初始化SolrPersistentEntitySchemaCreator应该创建/更新

public void afterPropertiesSet() {

  if (this.mappingContext == null) {
    this.mappingContext = new SimpleSolrMappingContext(
      new SolrPersistentEntitySchemaCreator(this.solrClientFactory)
       .enable(this.schemaCreationFeatures));
  }

  // ...
}

问题是标志schemaCreationFeatures(启用创建者)在工厂调用 afterPropertiesSet()后设置为,因此创作者无法进行做它的工作。

我将在spring-data-solr问题跟踪器中创建一个问题。暂时没有看到任何解决方法,其他的有一个自定义的fork / build of spring-data或者扩展一堆spring-classes并尝试使用之前设置的标志(但是可以做到这一点可以怀疑)