首页 > 数据库 >解决SpringBoot环境下Redis哨兵模式连接失败问题,“NOAUTH Authentication required”

解决SpringBoot环境下Redis哨兵模式连接失败问题,“NOAUTH Authentication required”

时间:2024-03-21 17:32:52浏览次数:32  
标签:SpringBoot redis required Redis springframework split org import config

io.lettuce.core.RedisCommandException Exception:“NOAUTH Authentication required”

在某行工作,项目上线代码,uat环境无异常,上到pp环境有问题,报redis连接不上;

观察配置,发觉是apollo的配置是哨兵模式,有个哨兵密码。spring2.2.6RELEASE版本问题。于是写了全局配置,读取配置中的sentinel.password

package com.yupi.springbootinit.config;

import cn.hutool.core.lang.Assert;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.data.redis.RedisProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisNode;
import org.springframework.data.redis.connection.RedisPassword;
import org.springframework.data.redis.connection.RedisSentinelConfiguration;

import java.util.ArrayList;
import java.util.List;

@Slf4j
@Configuration
public class RedisConfig {

    // 配置sentinel密码不生效,提示NOAUTH Authentication required。
//https://github.com/lettuce-io/lettuce-core/issues/1543
    @Bean
    public RedisSentinelConfiguration redisSentinelConfiguration(RedisProperties properties , @Value("${spring.redis.sentinel.password}") String sentinelPassword){
        RedisProperties.Sentinel sentinelProperties = properties.getSentinel();

        if (sentinelProperties != null) {
            RedisSentinelConfiguration config = new RedisSentinelConfiguration();
            config.master(sentinelProperties.getMaster());
            config.setSentinels(createSentinels(sentinelProperties));

            if (properties.getPassword() != null){
                config.setPassword(RedisPassword.of(properties.getPassword()));
            }
            if (sentinelPassword != null) {
            config.setSentinelPassword(RedisPassword.of(sentinelPassword));
            }
            config.setDatabase(properties.getDatabase());
            return config;
        }
        return null;
    }
        private List<RedisNode> createSentinels(RedisProperties.Sentinel sentinel) {
            List<RedisNode> nodes = new ArrayList<>();
            for (String node : sentinel.getNodes()) {
                String[] split = StringUtils.split(node, ":");
                Assert.notNull(split,"Must be defined as 'host:port'");
                Assert.state(split.length==2,"Must be defined as 'host:port'");
                nodes.add(new RedisNode(split[0],Integer.parseInt(split[1])));
            }
           return nodes;
        }

}

标签:SpringBoot,redis,required,Redis,springframework,split,org,import,config
From: https://blog.csdn.net/throwsExceptions/article/details/136910473

相关文章

  • java毕业设计线上牙科诊所管理推荐系统的设计与实现(springboot+mysql+jdk1.8+meven)
    本系统(程序+源码)带文档lw万字以上 文末可领取本课题的JAVA源码参考系统程序文件列表系统的选题背景和意义选题背景:随着互联网技术的飞速发展,越来越多的传统行业开始向数字化转型。医疗行业作为人们生活中的重要组成部分,其信息化、智能化的需求日益增长。牙科诊所作为提......
  • java毕业设计逍遥大药房管理系统(springboot+mysql+jdk1.8+meven)
    本系统(程序+源码)带文档lw万字以上 文末可领取本课题的JAVA源码参考系统程序文件列表系统的选题背景和意义选题背景:随着人们生活水平的提高,对健康的关注也日益增加。药房作为提供药品和健康咨询服务的重要场所,其管理效率和服务质量直接影响到人们的用药安全和健康。然而,......
  • java毕业设计小区宠物管理平台(springboot+mysql+jdk1.8+meven)
    本系统(程序+源码)带文档lw万字以上 文末可领取本课题的JAVA源码参考系统程序文件列表系统的选题背景和意义选题背景:随着社会的发展和人们生活水平的提高,越来越多的家庭开始饲养宠物。在城市中,小区是宠物活动的主要场所之一。然而,随着宠物数量的增加,小区宠物管理面临着许......
  • java毕业设计校园互助平台(springboot+mysql+jdk1.8+meven)
    本系统(程序+源码)带文档lw万字以上 文末可领取本课题的JAVA源码参考系统程序文件列表系统的选题背景和意义选题背景:随着互联网技术的飞速发展,人们的生活方式和学习方式都发生了翻天覆地的变化。特别是在校园环境中,学生们面临着各种各样的问题和需求,如学术问题、生活琐事......
  • 询问ChatGPT4,改造TodoList:把本地存储的localStorage修改成PHP+Redis
    这里照搬的是:免费极简设计网页版Todo  https://www.ricocc.com/todo/非常感谢原作者Rico。我很喜欢这个设计和风格,但是可惜只能本地存储,我又不想使用微软的TODO,登录倒无所谓,但是数据同步问题很大,实在头痛,所以放弃。我是菜鸟,只是刚好前段时间安装了Apache、PHP的一键安装包和......
  • SpringBoot建立websocket连接
    介绍WebSocket协议是一种基于TCP的协议,用于在客户端和服务器之间建立持久连接,并且可以在这个连接上实时地交换数据。WebSocket协议有自己的握手协议,用于建立连接,也有自己的数据传输格式。当客户端发送一个WebSocket请求时,服务器将发送一个协议响应以确认请求。在握手期间,......
  • GraalVM详细安装及打包springboot、java、javafx使用教程(环境安装篇)
    下一篇:GraalVM详细安装及打包springboot、java、javafx使用教程(打包普通JAVA项目篇)GraalVM介绍GraalVM是一款由Oracle公司开发的一款具有高效性能、降低基础设施成本、支持Java发展、与其他编程语言无缝集成、创建本机镜像等优点的跨平台虚拟机。它支持多种编程语言,如J......
  • Redisson-RTopic
    RTpoic简介:RTpoic是Redisson提供的用于实现发布-订阅(Pub/Sub)模式的类,它封装了 Redis 的发布和订阅功能,让开发者能够轻松地在分布式环境中进行消息的发布和订阅。实际上类似于Kafka、RocketMQ等一系列MessageQueue的生产-消费关系。自产自销:简单的说,可以实现一个服务中,自己......
  • Springboot实现qq邮件的发送
    一、打开必要的邮件设置首先登录qq邮箱官网登录之后,在设置中将传输协议给打开,我们需要用这个秘钥作为发件人的邮箱授权。这里开启之后,记住这个秘钥。二、代码编写首先我们将作为发送邮件的账户信息写入配置文件。spring:mail:host:smtp.qq.comusername......
  • 微软的Garnet的安装学习以及与Redis的简单对比
    微软的Garnet的安装学习以及与Redis的简单对比安装方式官网上面其实没有写如何安装garnet的很多人见识用nuget的方式进行安装我这边简单尝试了下也没看出来怎么用exe没办法只能学习dockerfile里面的内容在windows上面进行编译.下载地址https://codeload.github.com......