赞
踩
限贴下代码
- package com.shinedata.util.redis;
-
- import org.redisson.Redisson;
- import org.redisson.api.RedissonClient;
- import org.redisson.config.Config;
- import org.slf4j.Logger;
- import org.slf4j.LoggerFactory;
- import org.springframework.context.annotation.Bean;
- import org.springframework.context.annotation.Configuration;
-
- /**
- * @ClassName RedissonConfig
- * @Author yupanpan
- * @Date 2019/10/21 9:27
- */
- @Configuration
- public class RedissonConfig {
-
- private static final Logger logger = LoggerFactory.getLogger(RedissonConfig.class);
-
- @Bean
- public RedissonClient redissonClient(){
- RedissonClient redisson = null;
- try {
- Config config = new Config();
- String redisUrl = String.format("redis://%s:%s","xxxxxxx","6379");
- config.useSingleServer().setAddress(redisUrl).setPassword("artstep!@#$%QWERT");
- redisson = Redisson.create(config);
- }catch (Exception e){
- logger.error("初始化redisson失败",e);
- e.printStackTrace();
- }
- return redisson;
- }
- }
死活连接不上,还有根本不报错,反正项目就是起不起来,各种问题都找了,连接密码等信息都没错,然后debug跟源码,它居然把异常屏蔽自己处理了
发现了报个错误:java.lang.NoSuchMethodError: io.netty.resolver.dns.DnsAddressResolverGroup.<init>(Ljava/lang/Class;Lio/netty/resolver/dns/DnsServerAddressStreamProvider;)V
问题点找到了,第一眼看到这种错误就差不多是jar报冲突,因为报在netty,在引入redisson的时候会自动引入netty,因为redisson基于netty的。
然后在idea查看jar下解决,步骤
项目maven栏右击项目查看jar
查看依赖关系图,找到冲突的依赖为jpush极光推送的,排除jpush的io.netty
- <dependency>
- <groupId>cn.jpush.api</groupId>
- <artifactId>jpush-client</artifactId>
- <version>3.2.17</version>
- <exclusions>
- <exclusion>
- <groupId>io.netty</groupId>
- <artifactId>netty-all</artifactId>
- </exclusion>
- </exclusions>
- </dependency>
排除之后问题解决,正常启动项目。保险的情况下,建议都排除,然后引入一个高版本都可以使用的,高版本不一定会有redisson和jpush所需要的所有依赖
举例:依赖A包含依赖B,依赖B包含依赖C,依赖C包含依赖D1 A->B->C->D1
依赖E包含依赖F,依赖F包含依赖D2 E->F->D2
D1和D2同样的JAR,版本不一样,旧的版本可能没有新版本的方法。就会报java.lang.ClassNotFoundException等
Maven 面对 D1 和 D2 时,会默认选择最短路径的那个 jar 包,即 D2。E->F->D2 比 A->B->C->D1 路径短 1。
如果路径一样的话,如: A->B->C1, E->F->C2 ,两个依赖路径长度都是 2,那么就选择最先声明。
按照maven默认策略,依赖路径浅的优先,先声明redisson
最后的解决办法
- <!--netty Jar包冲突,保证redisson依赖在jpush maven加载顺序之上,否则jpush会覆盖redisson的netty jar,导致jar冲突-->
- <dependency>
- <groupId>org.redisson</groupId>
- <artifactId>redisson</artifactId>
- <version>3.8.2</version>
- </dependency>
- <dependency>
- <groupId>cn.jpush.api</groupId>
- <artifactId>jpush-client</artifactId>
- <version>3.2.17</version>
- <!-- <exclusions>-->
- <!-- <exclusion>-->
- <!-- <groupId>io.netty</groupId>-->
- <!-- <artifactId>netty-all</artifactId>-->
- <!-- </exclusion>-->
- <!-- </exclusions>-->
- </dependency>
正常启动成功
补充:当使用最后一种方式的时候,在linux环境下还是冲突,最后还是采取排除依赖
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。