Spring Boot 2迁移至3后Redis连接被拒绝问题求助
Spring Boot 3迁移后Redis连接被拒绝问题排查方案
错误信息显示应用尝试连接localhost/127.0.0.1:6379,但你的配置文件中指定的Redis地址是172.22.64.1:6379,说明配置未生效或被覆盖,以下是具体排查和解决方向:
1. 确认配置是否实际生效
- 检查是否存在优先级更高的配置源覆盖了
spring.redis.host:比如命令行参数、环境变量、其他profile配置文件(如application-dev.yml)、系统属性等。Spring Boot的配置优先级是命令行参数 > 环境变量 > 系统属性 > 应用内配置文件。 - 启动应用时,在日志中搜索
spring.redis.host,查看实际加载的配置值;若启用了Spring Boot Actuator,也可通过/actuator/env端点查看当前生效的Redis配置。
2. 检查自定义Redis配置类
如果项目中存在自定义的RedisConnectionFactory或RedisTemplate Bean,检查这些类是否硬编码了Redis连接地址(比如写死了localhost),没有读取配置文件中的属性。这种情况下,需要修改自定义Bean,注入RedisProperties来获取配置值:
@Configuration public class RedisConfig { @Bean public RedisConnectionFactory redisConnectionFactory(RedisProperties redisProperties) { LettuceConnectionFactory factory = new LettuceConnectionFactory(redisProperties.getHost(), redisProperties.getPort()); // 其他配置 return factory; } }
3. 验证Redis服务的网络连通性
- 在宿主机执行
redis-cli -h 172.22.64.1 -p 6379 ping,确认是否能正常连接Redis。如果连接失败,检查Docker容器的端口映射是否正常,或者Redis容器是否绑定了正确的IP(默认Redis绑定127.0.0.1,需要修改redis.conf绑定0.0.0.0才能被外部访问)。 - 如果Spring Boot应用也运行在Docker容器中,不要使用宿主机IP,而是直接用docker-compose中Redis服务的名称
redis作为host(Docker Compose会自动解析服务名到容器IP),修改配置为:spring: redis: host: redis port: 6379
4. 排查依赖冲突
执行依赖树命令检查是否存在旧版Redis相关依赖:
- Maven:
mvn dependency:tree - Gradle:
./gradlew dependencies
如果发现有旧版spring-data-redis或Redis客户端(如Jedis、Lettuce)的依赖,排除掉冲突的版本,确保只使用spring-boot-starter-data-redis3.0.1带来的依赖。
5. 检查YAML配置语法
确认application.yml中Redis配置的缩进正确(YAML对缩进严格要求),当前配置的缩进看起来没问题,但可以重新核对:
spring: redis: host: 172.22.64.1 port: 6379
内容的提问来源于stack exchange,提问作者Darotudeen
相关产品推荐
相关产品推荐

