在 Spring 引导下使用新版本的 Spring data Solr

Using new version of Spring data Solr with Spring boot

我在 Spring 引导应用程序 (1.2.7) 中使用 Spring Data Solr。现在,由于 Spring Data Solr Precedence for Custom Repository,我必须至少将 Spring Data Solr 更新为 1.4.x,而它目前处于 1.3.x.

但是,如果我明确添加以下依赖项:

<dependency>
   <groupId>org.springframework.data</groupId>
    <artifactId>spring-data-solr</artifactId>
    <version>1.4.2.RELEASE</version>
</dependency>

而我 运行 应用程序,我得到以下异常:

Caused by: java.lang.NoClassDefFoundError: org/springframework/data/mapping/PersistentPropertyAccessor
    at org.springframework.data.solr.core.SolrTemplate.getDefaultSolrConverter(SolrTemplate.java:573)
    at org.springframework.data.solr.core.SolrTemplate.afterPropertiesSet(SolrTemplate.java:622)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1633)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1570)
    ... 61 more
Caused by: java.lang.ClassNotFoundException: org.springframework.data.mapping.PersistentPropertyAccessor
    at java.net.URLClassLoader.run(URLClassLoader.java:372)
    at java.net.URLClassLoader.run(URLClassLoader.java:361)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:360)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 65 more

我知道您通常应该信任 Spring 启动本身的依赖管理,但这意味着您不能使用条件在 Solr 查询的某些部分周围加上括号,这非常关键。

Spring 数据作为一组模块发布,这些模块都旨在协同工作。通过仅升级 spring-data-solr,您试图让它与所有 Spring 数据依赖项的旧版本一起工作。我建议改为升级所有 Spring 数据,以便您获得一组一致的版本。

Spring Data Fowler 发布序列包含 Spring Data Solr 1。4.x 和 SR2 包含 Spring Data Solr 1.4.2。假设您使用 spring-boot-starter-parent 作为 pom 的父级,您可以通过覆盖 spring-data-releasetrain.version 属性:

使用此版本
<properties>
    <spring-data-releasetrain.version>Fowler-SR2</<spring-data-releasetrain.version>
</properties>