springboot session redis 共享缓存 报 java.lang.NoSuchMethodError错

yagamic
  • 36

我用spring-session 和 redis 做session共享 ,然后报以下错误,看着好像是 spring-context-5.0.7.RELEASE 和 spring-session-1.3.3.RELEASE 冲突了, 可是我没有直接引用 spring-context,是在某个stater包里吗,求大神指导

2018-07-31 08:24:00.002 ERROR 18436 --- [pool-2-thread-1] o.s.s.s.TaskUtils$LoggingErrorHandler    : Unexpected error occurred in scheduled task.

java.lang.NoSuchMethodError: org.springframework.data.redis.core.RedisOperations.delete(Ljava/lang/Object;)V
    at org.springframework.session.data.redis.RedisSessionExpirationPolicy.cleanExpiredSessions(RedisSessionExpirationPolicy.java:132) ~[spring-session-1.3.3.RELEASE.jar:na]
    at org.springframework.session.data.redis.RedisOperationsSessionRepository.cleanupExpiredSessions(RedisOperationsSessionRepository.java:398) ~[spring-session-1.3.3.RELEASE.jar:na]
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_101]
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_101]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_101]
    at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_101]
    at org.springframework.scheduling.support.ScheduledMethodRunnable.run(ScheduledMethodRunnable.java:65) ~[spring-context-5.0.7.RELEASE.jar:5.0.7.RELEASE]
    at org.springframework.scheduling.support.DelegatingErrorHandlingRunnable.run(DelegatingErrorHandlingRunnable.java:54) ~[spring-context-5.0.7.RELEASE.jar:5.0.7.RELEASE]
    at org.springframework.scheduling.concurrent.ReschedulingRunnable.run(ReschedulingRunnable.java:93) [spring-context-5.0.7.RELEASE.jar:5.0.7.RELEASE]
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) [na:1.8.0_101]
    at java.util.concurrent.FutureTask.run(FutureTask.java:266) [na:1.8.0_101]
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180) [na:1.8.0_101]
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293) [na:1.8.0_101]
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [na:1.8.0_101]
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [na:1.8.0_101]
    at java.lang.Thread.run(Thread.java:745) [na:1.8.0_101]
回复
阅读 3.6k
3 个回答

我找到问题了,原因是 我使用springboot的版本是 2.0.3,改回1.5.9就好了
用springboot 2 集成 redis + jedis + spring-session + security 做登录和session共享 还需要在研究下

shyding
  • -4
新手上路,请多包涵

除了降级,应该还有其他的解决方法吧?

迷糊蛋v6_3_3
  • 1
新手上路,请多包涵

这两天我也被这个搞蒙了,总结了一下确实是版本问题,spring5(springboot2.x)只支持spring-session-core了。
最高版本的spring-session:1.3.5已经不再更新,而且支持到spring-session-data-redis:1.8。

官方文档上写了,spring-session-data-redis2.x后只能搭配spring-session-core2.x,关键我现在在写的项目是前后端分离的,老版本的spring-session能实现session一致,用新的spring-session-core就会出现session不一致的问题,最后没办法,只能舍弃spring-session框架,改用原生session机制。

后面在想办法优化成直连redis实现伪session或者token加密传递userid这种了

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
你知道吗?

宣传栏