【问题标题】:Using new version of Spring data Solr with Spring boot在 Spring boot 中使用新版 Spring data Solr
【发布时间】:2016-01-22 23:09:50
【问题描述】:

我在 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$1.run(URLClassLoader.java:372)
    at java.net.URLClassLoader$1.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 boot 本身的依赖管理,但这意味着您不能使用标准将括号括在 Solr 查询的部分周围,这非常关键。

【问题讨论】:

    标签: spring-boot spring-data-solr


    【解决方案1】:

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

    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>
    

    【讨论】:

    • 我没有直接使用 Spring boot 作为我的 POM 的父级,所以我添加了 releasetrain(使用您提供的版本)作为我的&lt;dependencyManagement&gt; 部分的第一个条目,这就是诀窍。感谢您的回答,我现在知道发布火车的存在。
    猜你喜欢
    • 2022-11-10
    • 2017-02-09
    • 2016-11-12
    • 2015-06-13
    • 2018-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多