redisson无法连接redis jar包冲突

34 篇文章 0 订阅

限贴下代码

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所需要的所有依赖

 

Maven默认处理策略

            举例:依赖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环境下还是冲突,最后还是采取排除依赖

  • 5
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
回答: 要在Spring Boot中集成Redisson连接Redis集群,你需要进行以下步骤。首先,你需要在pom.xml文件中引入Redisson的依赖项,如下所示:\[2\] ```xml <dependency> <groupId>org.redisson</groupId> <artifactId>redisson</artifactId> <version>3.17.0</version> </dependency> ``` 接下来,你需要在配置文件中进行相应的配置。你可以使用Redisson提供的配置类来配置Redis连接,例如使用`RedissonClusterConfig`来配置Redis集群连接。你可以在配置文件中指定Redis集群的节点信息和其他相关配置。\[2\] 最后,你可以在Spring Boot应用程序中使用RedissonAPI连接和操作Redis集群。你可以使用`RedissonClient`接口来获取Redis连接,并使用相应的方法来执行操作,如存储、读取和删除数据等。\[2\] 如果你想使用命令行来搭建Redis集群,你可以使用以下命令:\[3\] ``` redis-cli --cluster create 192.168.2.66:7000 192.168.2.66:7001 192.168.2.66:7002 192.168.2.66:7003 192.168.2.66:7004 192.168.2.66:7005 --cluster-replicas 1 ``` 这个命令将创建一个包含6个节点的Redis集群,并设置每个主节点有一个从节点。你需要根据你自己的实际情况修改IP地址和端口号。\[3\] 希望这些信息对你有帮助! #### 引用[.reference_title] - *1* *3* [SpringBoot整合Redisson操作集群redis](https://blog.csdn.net/u013658328/article/details/112661206)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [SpringBoot集成redisson操作redis](https://blog.csdn.net/quanzhan_King/article/details/130961128)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值