Spring Boot 在使用 solrj 而不是 spring-boot-starter-data-solr 时会爆炸

Posted

技术标签:

【中文标题】Spring Boot 在使用 solrj 而不是 spring-boot-starter-data-solr 时会爆炸【英文标题】:Spring Boot blows up when using solrj but not spring-boot-starter-data-solr 【发布时间】:2015-06-13 18:22:23 【问题描述】:

我正在尝试将现有的 Spring 应用程序移植到 Spring Boot。我使用 spring-boot-starter-data-solr 启动器,但是我的类路径上有 apache solrj (5.0.0)。

在启动过程中,应用程序崩溃了。似乎 spring boot 看到了 solr 类,并假设我在类路径上也有 spring-boot-starter-data-solr。特别是我得到这个错误:

java.lang.IllegalArgumentException: @ConditionalOnMissingBean 注释必须至少指定一个 bean(类型、名称或注释)

如果我放弃 solrj 依赖并改用 spring-boot-starter-data-solr 就可以了。但是我不需要 spring-data-solr 集成,这样做会迫使我将我们的应用程序反向移植到 solr 的 4.7.x 版本。

有人知道解决方法吗?

【问题讨论】:

【参考方案1】:

所以看来问题是由 spring boot 对 solrj 4.7.x 的依赖引起的,而我使用的是 5.0.0

我通过使用修复它

@SpringBootApplication(exclude = SolrAutoConfiguration.class)

告诉引导完全忽略 SolrAutoConfiguration。

【讨论】:

根本原因是 5.0 不是 4.7 的直接替代品,因为它包含一些破坏性的 API 更改。我想当 Spring Data Solr 迁移到 5.0 时,Spring Boot 将支持 Solr 5.0。与此同时,我打开了an issue 以改进诊断。

以上是关于Spring Boot 在使用 solrj 而不是 spring-boot-starter-data-solr 时会爆炸的主要内容,如果未能解决你的问题,请参考以下文章

使用 Spring-Boot 创建一个简单的 JAR 而不是可执行的 JAR

在 Kubernetes 上使用 Prometheus 监控 Spring Boot 应用程序,而不是设置端点

Spring Boot 返回字符串而不是视图

测试容器在 Spring Boot 项目中启动两个容器而不是一个

在 ELB 后面使用带有 Spring Boot 的 SAML 重定向到 http 而不是 https

Flux 响应而不是 WebSocket (Spring boot)