spring-data-redis 版本兼容问题

场景:

    1、项目中**RedisImpl.java中调用HashOperations的delete方法报NoSuchMethodError异常;NoSuchMethodError:org.springframework.data.redis.core.HashOperations.delete(Ljava/lang/object;Ljava/lang/Object)V

    2、调用delete方法逻辑类,为单独模块(打包为jar包)

排查过程:

    1、查看jar对应spring-data-redis jar包版本(经查为:1.5.2)

    2、项目所用spring-data-redis jar版本为:1.8.12

    3、经排查项目中其他所有jar没有其他同名java类:HashOperations

    4、对比spring-data-redis 1.5.2版本和1.8.12版本中HashOperations及实现类,发现delete 方法的返回值不同(1.5.2为void; 1.8.12为Long)

    5、对比spring-data-redis 1.5.2版本和1.8.12版本下**RedisImpl.java java类对应的class文件,class内容中为delete方法指定了返回值,因此在1.8.12下找不到void delete方法而报错。

解决方案:

    方案一:模块中升级spring-data-redis 1.5.2版本至1.8.12版本,重新打包jar包;

    方案二:项目降级spring-data-redis 至1.5.2版本(需分析风险和兼容性)

结论:

    1、需注意项目编译和运行时引用jar包版本是否一致,尤其需留意方法声明有变更的情况(包含返回值)

    2、观察问题内容不够细致,异常信息已经打印了delete方法的返回值,应该第一时间去核对方法声明;NoSuchMethodError:org.springframework.data.redis.core.HashOperations.delete(Ljava/lang/object;Ljava/lang/Object)V

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容