SpringBoot 启动报错 Unable to connect to Redis server: 127.0.0.1/127.0.0.1:6379 问题解决

2024-07-13 1257阅读

🚀 作者主页: 有来技术

🔥 开源项目: youlai-mall 🍃 vue3-element-admin 🍃 youlai-boot

🌺 仓库主页: Gitee 💫 Github 💫 GitCode

💖 欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请纠正!

目录

  • 问题描述
  • 原因分析
  • 源码分析
  • 解决方案

    问题描述

    使用开源项目 youlai-boot 中,使用默认线上配置没问题的,但将 Redis 的修改为本地的环境出现无法连接的错误

    SpringBoot 启动报错 Unable to connect to Redis server: 127.0.0.1/127.0.0.1:6379 问题解决

    启动项目报错关键信息:

    org.redisson.client.RedisConnectionException: Unable to connect to Redis server: 127.0.0.1/127.0.0.1:6379
    

    稍微完整的错误信息:

    org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'securityConfig' defined in file [D:\Project\Work\youlai-boot\target\classes\com\youlai\system\config\SecurityConfig.class]: Unsatisfied dependency expressed through constructor parameter 2: Error creating bean with name 'redisTemplate' defined in class path resource [com/youlai/system/config/RedisConfig.class]: Unsatisfied dependency expressed through method 'redisTemplate' parameter 0: Error creating bean with name 'redissonConnectionFactory' defined in class path resource [org/redisson/spring/starter/RedissonAutoConfigurationV2.class]: Unsatisfied dependency expressed through method 'redissonConnectionFactory' parameter 0: Error creating bean with name 'redisson' defined in class path resource [org/redisson/spring/starter/RedissonAutoConfigurationV2.class]: Failed to instantiate [org.redisson.api.RedissonClient]: Factory method 'redisson' threw exception with message: java.util.concurrent.ExecutionException: org.redisson.client.RedisConnectionException: Unable to connect to Redis server: 127.0.0.1/127.0.0.1:6379
    

    错误截图:

    SpringBoot 启动报错 Unable to connect to Redis server: 127.0.0.1/127.0.0.1:6379 问题解决

    原因分析

    再看下修改前后的对比图

    SpringBoot 启动报错 Unable to connect to Redis server: 127.0.0.1/127.0.0.1:6379 问题解决

    线上 Redis 服务配置了密码,而本地 Redis 服务没有密码,因此我们理所当然地将 password 的值留空。然而,这正是问题的根本原因,因为空值仍会被解析为一个空字符串,而不是被忽略。

    如果只是这样说是没有说服力的,接下来我将本着“源码面前无秘密”的原则,深入揭示问题的本质。

    源码分析

    假设本地的 Redis 未配置密码,SpringBoot 的 Redis 连接配置如下:

    spring:
      data:
        redis:
          database: 0
          host: 127.0.0.1
          port: 6379
          password:
    

    MasterSlaveConnectionManager#createClient 根据配置创建客户端,其中配置的 password 是空字符串而不是null。

    SpringBoot 启动报错 Unable to connect to Redis server: 127.0.0.1/127.0.0.1:6379 问题解决

    BaseConnectionHandler#channelActive 方法根据配置进行 Redis 客户端连接初始化。由于配置中的 password 被解析成空字符串而非 null,因此尝试使用空字符串作为密码连接 Redis,但由于 Redis 服务未设置密码,连接失败。SpringBoot 启动报错 Unable to connect to Redis server: 127.0.0.1/127.0.0.1:6379 问题解决

    解决方案

    由上可知,如果将配置的 password 值设置为空,则客户端在连接时会使用空字符串作为密码进行认证。由于服务端未设置密码,因此连接失败。

    解决方法其实很简单,如果 Redis 服务未设置密码,需要将 password 注释或删除,而不是设置为空字符串。

    spring:
      data:
        redis:
          database: 0
          host: 127.0.0.1
          port: 6379
       	  # 如果 Redis 服务未设置密码,需要将 password 删除或注释,而不是设置为空字符串
          # password:
    

    再次调试可以看到 password 为 null ,直接跳过密码认证,直接返回已完成的 CompletableFuture 对象

    SpringBoot 启动报错 Unable to connect to Redis server: 127.0.0.1/127.0.0.1:6379 问题解决

VPS购买请点击我

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

目录[+]