Spring Boot 1.4.3集成ElasticSearch 6.1.1报NoClassDefFoundError问题咨询
问题排查与方案解答
版本兼容性结论
Spring Boot 1.4.3 与 ElasticSearch 6.1.1 默认不兼容。
Spring Boot 1.4.x 版本默认绑定的 ElasticSearch 客户端基线为 2.x 版本,而 org/elasticsearch/action/count/CountRequestBuilder 类在 ElasticSearch 6.x 版本中已被正式移除,你遇到的类未找到错误,本质是项目依赖中同时存在不同版本的 ElasticSearch 客户端包,运行时类加载冲突导致。
兼容适配调整方案
如果一定要在当前 Spring Boot 版本下使用 ElasticSearch 6.1.1,需要手动覆盖所有 ElasticSearch 相关依赖的版本:
- 全局锁定
elasticsearch、transport、elasticsearch-client等所有相关包的版本统一为 6.1.1,避免 Spring Boot 默认依赖管理引入低版本包 - 额外引入适配 ElasticSearch 6.x 版本的 Spring Data Elasticsearch 依赖,注意排除传递引入的低版本 ElasticSearch 包
注:Spring Boot 1.4.3 基线较老,强行调整依赖版本大概率会触发其他关联依赖冲突,整体改造成本较高
替代对接方案说明
- 低层级REST客户端方案:是当前场景下的最优选择。ElasticSearch 官方提供的低层级REST客户端对服务端版本兼容性极强,只要 ElasticSearch 服务端为 5.x 及以上版本均可正常对接,且不受 Spring Boot 版本限制,你只需直接引入对应 6.1.1 版本的低层级REST客户端依赖即可,不会出现API类缺失的问题。
- ElasticTemplate 方案:可实现但适配成本高。ElasticTemplate 是 Spring Data Elasticsearch 封装的操作工具,要对接 ElasticSearch 6.1.1 需要匹配对应版本的 Spring Data Elasticsearch,而 Spring Boot 1.4.3 对应的 Spring Data 版本基线过低,需要做大量的依赖排异工作,性价比远低于直接使用REST客户端。
内容的提问来源于stack exchange,提问作者Shailendra Garg
相关产品推荐
相关产品推荐

