当前位置: 首页 > >

提示找不到 redis.clients.jedis.Connection#sendCommand

发布时间:

前天用websocke做了个项目,收发消息嘛。
我在websocke收到消息的时候,需要操作redis数据库。
大概是这样↓


@Override
public void handleMessage(WebSocketSession session, WebSocketMessage message) {
redisCacheManager .set("name","jy");
}

一直给我报错。



java.lang.NoClassDefFoundError: Could not find required flavor of command required by ‘redis.clients.jedis.Connection#sendCommand’.



如果照着网上的讲,是jedis和spirng-redis的包不兼容的问题。
这个问题,具体参考。装了无数遍完全没有用。



https://blog.csdn.net/Qizhan_feng/article/details/90216361



鼓捣了两天,真的整整两天没搞定。
最后在这个地方↓看到了解决方案。



https://segmentfault.com/q/1010000009789923



所以问题就是:其实是websocket类没有被spring管控,它就是个普通的类。直接在这里放spirng的注解会实例化一个错误的类。
我们需要手动从从当前application的getBen方法拿对应的service
方法如下:



https://www.cnblogs.com/againn/p/9013751.html



然后原方法里改成:


redisCacheManager = (RedisCacheManager )ApplicationHelper.getBean("redisCacheManager ");
System.out.println(redisCacheManager .get("lion"));

大功告成!

分割线-----------------------------------------------------------

好了 ,我又遇到一模一样的错误了,晕。
*粝钅恐笊细龇椒ú还苡昧恕N艺鹁耍畹阌窒胱员铡
沃曰,奇了怪了。


于是又找到了解决方法,
不知道什么原因,需要在使用这个报错的类之前,必须在其他地方实例化这个对象一次。
例如在一个Controller中先实例化一次这个。


RedisCacheManager redisCacheManager = (RedisCacheManager)ApplicationHelper.getBean("redisCacheManager");

然后在websocket方法里,才能照着上面的方法用这个。千万别在websocket的方法里第一次实例化它。给我疯狂报错。我怀疑是不是websocket比较复杂,是不是多线程的问题或者单例多例的问题。毕竟我对这方面理解不深。


分割线-----------------------------------------------------------

哎 其实这个是写给我自己看的。。我不期待会有谁看得到。如果你有我一样的遭遇,希望能看到这个文章帮助你有一点思路。有用的话记得评论一下!我会看到很开心!



友情链接: