ClassCastException异常
我在使用JedisCluster的实例,调用它的方法getClusterNodes()然后给一个JedisPool赋值的时候,提示我一个ClassCastException,具体的栈信息如下:
java.lang.ClassCastException: redis.clients.jedis.JedisPool cannot be cast to redis.clients.jedis.JedisPool at com.redis.monitor.redis.impl.RedisServiceImpl.ping(RedisServiceImpl.java:537) at com.redis.monitor.manager.impl.RedisManagerImpl.ping(RedisManagerImpl.java:190) at com.redis.monitor.web.interceptor.ServerInteceptor.preHandle(ServerInteceptor.java:93) at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:891) at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:827) at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:882) at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:778) at javax.servlet.http.HttpServlet.service(HttpServlet.java:693) at javax.servlet.http.HttpServlet.service(HttpServlet.java:806) at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:533) at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1351) at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76) at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1322) at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:473) at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:119) at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:514) at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:226) at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:920) at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:403) at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:184) at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:856) at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:117) at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:114) at org.eclipse.jetty.server.Server.handle(Server.java:352) at org.eclipse.jetty.server.HttpConnection.handleRequest(HttpConnection.java:596) at org.eclipse.jetty.server.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:1049) at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:590) at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:212) at org.eclipse.jetty.server.HttpConnection.handle(HttpConnection.java:426) at org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.java:510) at org.eclipse.jetty.io.nio.SelectChannelEndPoint.access$000(SelectChannelEndPoint.java:34) at org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run(SelectChannelEndPoint.java:40) at org.eclipse.jetty.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:450) at java.lang.Thread.run(Thread.java:722)代码如下:
public String ping(Redis redis) { Jedis jedis = null; JedisPool jp = null; boolean broken = false; try { Map<String, JedisPool> poolMap = redis.getJedisCluster().getClusterNodes(); for(JedisPool jp1:poolMap.values()){ jedis = jp1.getResource(); jedis.ping(); } } catch (JedisConnectionException jce) { broken = true; } catch (Exception e) { e.printStackTrace(); } return ""; }
在for循环赋值给JedisPool的时候会出错.
大家帮忙看看是怎么回事
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(7)
谢谢哥, 原来问题是这样的, 我在项目里用到了ant和maven, ant打包的时候会把maven中的那些jar包都放到WEB-INF下的lib文件夹,然后我在eclipse测试测试的时候,虽然是用maven构建的项目,但项目依然会进入lib文件夹读取jar包.
而我确实升级了一下jedis的版本,从2.1.0->2.7.3,导致有两个jar包依赖.结果2.7.3的类构建的对象又被赋值给2.1.0版本的类声明的变量,结果出错了.
解决方案就是,我把lib下的包都删掉了. 然后在ant打包的时候,加了删除的内容,保证lib包的内容始终跟开发项目里的内容同步.搞定.
引用来自“编走编想”的评论
类名相同,但是还报 ClassCastException,那原因基本上就是 ClassLoader 不同导致的了
如果用 Maven 做项目管理的话,试试 mvn dependency:tree 命令,查查是否有重复的 jedis 依赖
引用来自“编走编想”的评论
类名相同,但是还报 ClassCastException,那原因基本上就是 ClassLoader 不同导致的了
引用来自“编走编想”的评论
类名相同,但是还报 ClassCastException,那原因基本上就是 ClassLoader 不同导致的了
类名相同,但是还报 ClassCastException,那原因基本上就是 ClassLoader 不同导致的了
引用来自“编走编想”的评论
类名相同,但是还报 ClassCastException,那原因基本上就是 ClassLoader 不同导致的了