ClassCastException异常

发布于 2021-12-01 12:53:40 字数 3819 浏览 741 评论 7

我在使用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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(7

瀞厅☆埖开 2021-12-02 12:51:40

谢谢哥, 原来问题是这样的, 我在项目里用到了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包的内容始终跟开发项目里的内容同步.搞定.

平定天下 2021-12-02 12:51:20

引用来自“编走编想”的评论

类名相同,但是还报 ClassCastException,那原因基本上就是 ClassLoader 不同导致的了

时光清浅 2021-12-02 12:47:42

如果用 Maven 做项目管理的话,试试 mvn dependency:tree 命令,查查是否有重复的 jedis 依赖

虐人心 2021-12-02 09:51:38

引用来自“编走编想”的评论

类名相同,但是还报 ClassCastException,那原因基本上就是 ClassLoader 不同导致的了

琴流音 2021-12-02 03:55:44

引用来自“编走编想”的评论

类名相同,但是还报 ClassCastException,那原因基本上就是 ClassLoader 不同导致的了

半世蒼涼 2021-12-01 19:53:23

类名相同,但是还报 ClassCastException,那原因基本上就是 ClassLoader 不同导致的了

羁拥 2021-12-01 17:19:22

引用来自“编走编想”的评论

类名相同,但是还报 ClassCastException,那原因基本上就是 ClassLoader 不同导致的了

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文