升级SpringBoot版本导致NoSuchMethodError: redis/clients/jedis/ScanResult.getStringCursor()

今天在对SpringBoot项目升级的时候,把2.1.8.RELEASE 升级到了 2.3.2.RELEASE ,运行后发现,
在获取在线用户的时候,报了一个错误,日志如下:

Caused by: java.lang.NoSuchMethodError: redis/clients/jedis/ScanResult.getStringCursor()Ljava/lang/String; (loaded from file:/E:/m2/repository/redis/clients/jedis/3.3.0/jedis-3.3.0.jar by sun.misc.Launcher$AppClassLoader@1a61fefc) called from class org.crazycake.shiro.WorkAloneRedisManager (loaded from file:/E:/m2/repository/org/crazycake/shiro-redis/3.2.3/shiro-redis-3.2.3.jar by sun.misc.Launcher$AppClassLoader@1a61fefc).
	at org.crazycake.shiro.WorkAloneRedisManager.keys(WorkAloneRedisManager.java:149)
	at org.crazycake.shiro.RedisSessionDAO.getActiveSessions(RedisSessionDAO.java:110)
	at aoshu.bi.monitor.service.impl.SessionServiceImpl.list(SessionServiceImpl.java:35)
	at aoshu.bi.monitor.controller.SessionController.list(SessionController.java:31)
	at aoshu.bi.monitor.controller.SessionController$$FastClassBySpringCGLIB$$a006a1f.invoke(<generated>)
	at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)
	at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:771)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)
	at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:749)
	at org.apache.shiro.spring.security.interceptor.AopAllianceAnnotationsAuthorizingMethodInterceptor$1.proceed(AopAllianceAnnotationsAuthorizingMethodInterceptor.java:82)
	at org.apache.shiro.authz.aop.AuthorizingMethodInterceptor.invoke(AuthorizingMethodInterceptor.java:39)
	at org.apache.shiro.spring.security.interceptor.AopAllianceAnnotationsAuthorizingMethodInterceptor.invoke(AopAllianceAnnotationsAuthorizingMethodInterceptor.java:115)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
	at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:749)
	at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:691)
	at aoshu.bi.monitor.controller.SessionController$$EnhancerBySpringCGLIB$$cfa3f04c.list(<generated>)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:190)
	at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:138)
	at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:105)
	at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:878)
	at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:792)
	at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)
	at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1040)
	... 64 common frames omitted

主要看这里
Caused by: java.lang.NoSuchMethodError: redis/clients/jedis/ScanResult.getStringCursor()Ljava/lang/String;

这里调的方法是业务里获取在线用户的方法,
在这里插入图片描述
项目引入了 Shiro ,引入了Shiro-redis 这个开源项目

<dependency>
    <groupId>org.crazycake</groupId>
    <artifactId>shiro-redis</artifactId>
    <version>3.2.3</version>
</dependency>

Debug 发现 ,底层调用了 scanResult.getStringCursor() 这个方法
在这里插入图片描述
而SpringBoot 2.3 依赖的jedis 的版本为 3.1,已经改为 public String getCursor() 这个方法了 ,没有了 2.9.3 getStringCursor() 方法
在这里插入图片描述

解决方法

由于 Shiro-redis 已经不再维护了,那么只能手动引入 jedis的 2.9.3 版本

在pom.xml

<properties>
    <java.version>1.8</java.version>
    <elasticsearch.version>7.6.1</elasticsearch.version>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <jedis.version>2.9.3</jedis.version>
</properties>
  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值