升级Spring Boot 3.1.2与Spring Data Solr 4.3.15的兼容问题求助
问题解决思路
核心原因分析
- 编译错误(
ListCrudRepository找不到):Spring Data SOLR 4.3.15基于Spring Data Commons 3.x开发,ListCrudRepository是Spring Data Commons 3.x新增的接口,强制使用2.7.14版本会导致编译时找不到该类。 - 启动错误(
EntityInstantiators找不到):Spring Data Commons 3.1.2中移除了org.springframework.data.convert.EntityInstantiators类,但Spring Data SOLR 4.3.15的MappingSolrConverter仍直接依赖这个旧类,导致运行时类缺失。
需要明确:Spring Data SOLR已进入维护终止状态,最新版本4.3.15仅适配Spring Boot 2.7.x(对应Spring Data Commons 2.7.x),无官方适配Spring Boot 3.x的版本。
可行解决方案
方案1:回退Spring Boot版本
如果业务对Spring Boot 3.x的特性没有强需求,直接回退到Spring Boot 2.7.x版本,保持Spring Data SOLR 4.3.15 + Spring Data Commons 2.7.14的组合,这是最稳妥的方案,不会引入额外兼容成本。
方案2:自定义Converter绕过依赖冲突
如果必须升级Spring Boot 3.x,可以自定义MappingSolrConverter替换默认实现,绕过对EntityInstantiators的依赖:
- 复制原
MappingSolrConverter的代码,将构造方法中依赖EntityInstantiators的逻辑替换为Spring Data Commons 3.x中的替代实现(比如EntityInstantiatorFactory)。 - 在配置类中手动创建自定义的
MappingSolrConverter实例,并注入到SolrTemplate中,覆盖默认的转换器。
方案3:替换为SolrJ直接操作
彻底放弃Spring Data SOLR,改用Solr官方提供的SolrJ客户端直接与Solr交互:
- 引入SolrJ依赖(版本与你的Solr服务端匹配)。
- 封装SolrJ的操作工具类,实现原Spring Data SOLR提供的查询、更新等逻辑。
- 这种方式完全脱离Spring Data的版本限制,适配Spring Boot 3.x更灵活,也能避免后续Spring Data版本升级带来的兼容问题。
关于版本隔离的疑问
无法在Maven中实现Spring Data SOLR单独使用旧版Commons:
Spring Boot的自动配置、其他Spring Data模块(如JPA、MongoDB等)都依赖Spring Data Commons 3.x,同一个类加载器下无法同时存在两个版本的Spring Data Commons,强行通过Maven依赖排除或强制指定版本会导致大量类冲突、类型转换异常,实际运行中会出现更多不可预见的问题,完全不具备可行性。
内容的提问来源于stack exchange,提问作者user3508858
相关产品推荐
相关产品推荐

