异常信息
- redisson.create() 时出现异常信息如下:
- nested exception is java.lang.NoSuchMethodError: io.netty.resolver.dns.DnsNameResolverBuilder.socketChannelType
- 上面报错意思是:在 io.netty.resolver.dns.DnsNameResolverBuilder 这个类中,没找到 socketChannelType 方法(NoSuchMethodError:没找到方法)
分析可能的问题
- 首先:Redisson自身不会出现这个问题,否则jar包都打不了
- 其次,肯定是io.netty.resolver.dns.DnsNameResolverBuilder 这个类中,没找到 socketChannelType 方法,才会抛出这个异常
- 那么可能出现这个的问题有:
依赖版本不对
:就是redisson中依赖的netty版本,与其需要的版本不一致项目缓存
:即原本应该要依赖netty的版本,因为缓存,导致版本不一致
排查
-
先确认项目中Redisson加载的
netty-resolver-dns
版本是多少- 从下图中可以看出,它加载的是
4.1.27.Final
- 从下图中可以看出,它加载的是
-
到Maven 仓库中,查看对应Redisson版本,其需要的netty版本是多少
- 从下图中可以看出,实际需要的是
4.1.107.Final
- 从下图中可以看出,实际需要的是
-
结论:
Redisson-3.27.2所需要的netty-resolver-dns版本不对
解决
- 解决方式一般有两种:
- 第一种:找到
netty-resolver-dns:4.1.27.Final
依赖是从哪个依赖被引入进来的,然后在pom.xml中将其排除掉 - 第二种:更换Redisson版本(比如:Redisson:3.7.5,其对
netty-resolver-dns
依赖的版本就是:4.1.27.Final
- 第一种:找到
遗留问题
- 这里:我没找到
netty-resolver-dns:4.1.27.Final
依赖是从哪个依赖被引入进来的。从IDEA的依赖关系图中,显示的结果是:只有Redisson:3.27.2
在引入它
- 但是:我知道
netty-resolver-dns:4.1.27.Final
依赖肯定是由于其它依赖先引入了netty-resolver-dns
,导致Maven不再加载netty-resolver-dns
【maven顺序加载依赖,已加载过的将不会继续加载】,从而导致netty-resolver-dns
依赖版本不对
有大神懂怎么查看netty-resolver-dns
依赖从哪里开始被引入进来的吗?请留言指导一下~