从 config-server 获取 application.properties 时出现 Redis 连接失败错误

Posted

技术标签:

【中文标题】从 config-server 获取 application.properties 时出现 Redis 连接失败错误【英文标题】:Redis Connection Failure error occurs when getting application.properties from config-server 【发布时间】:2019-10-16 01:46:22 【问题描述】:

我在 localhost:6379 中运行了一个 Redis 服务,spring-boot 微服务通过从 application.properties 文件中读取主机名和端口来连接到这个 redis 服务。

@Configuration
public class RedisConfiguration 

    /**
    * redis host.
    */
    @Value("$spring.redis.host")
    private String redisHost;

    /**
     * redis port.
     */
    @Value("$spring.redis.port")
    private int redisPort;


    @Bean
    JedisConnectionFactory jedisConnectionFactory() 
        RedisStandaloneConfiguration redisConf = new RedisStandaloneConfiguration(redisHost, redisPort);
    return new JedisConnectionFactory(redisConf);

在 application.properties 文件中,给定的属性是 -

spring.redis.host=localhost 
spring.redis.port=6379

当我在默认配置文件中运行微服务时,这完美工作,它使用来自/src/main/resources 文件夹的默认 application.properties。

现在我面临的挑战是,当我在测试配置文件中运行微服务时,它必须从配置服务器获取属性文件,该配置服务器从 github 存储库克隆它。

在这种情况下,redis 服务显示这样的错误

[ERROR][2019-05-30 15:48:33,761][pool-1-thread-4|org.springframework.data.redis.listener.RedisMessageListenerContainer:handleSubscriptionException:651] 连接失败。 5000毫秒后重启订阅任务

仅当我从配置服务获取属性文件时才会出现此错误。

github 存储库中的 application-test.properties 也具有正确的 redis 配置。

请帮我解决这个问题。

【问题讨论】:

【参考方案1】:

最后,经过大量调试,我发现出了什么问题。这是由于spring.redis.host=localhost 末尾的多余空间导致了此问题。

【讨论】:

是的,同样的问题也发生在我身上。我按照你的回答,现在工作正常。我在 spring.redis.host=localhost 末尾清除了不需要的空间,在我的情况下, localhost 用双引号括起来。我也删除了它。

以上是关于从 config-server 获取 application.properties 时出现 Redis 连接失败错误的主要内容,如果未能解决你的问题,请参考以下文章

Spring Cloud搭建手册——Spring Cloud Config

CVE-2020-5405spring-cloud-config-server路径穿越漏洞分析

第五篇 高可用配置中心config-server(SVN版)

config-server中@RefreshScope的"陷阱"

springcloud config配置中心

使用 Spring-Cloud-Connectors 配置 Spring Boot 以使用 PWS Config-Server