Spring Gateway配置远程Redis却仍连本地,连接失败问题排查
Spring Gateway 始终连接本地Redis而非远程配置的排查分析
问题现象
- Spring Gateway启动时抛出Redis连接失败异常,始终尝试连接
localhost:6379,而非配置的远程IP1.2.3.4 - 无法通过telnet连接远程Redis,但核心问题是应用未读取到正确的Redis配置
报错信息
org.springframework.data.redis.RedisConnectionFailureException: Unable to connect to Redis ... Caused by: io.lettuce.core.RedisConnectionException: Unable to connect to localhost/<unresolved>:6379
已配置的Redis参数(application.yml)
spring: redis: host: 1.2.3.4 port: 6379 password: passw database: 0 timeout: 3000 lettuce: pool: max-active: 8 max-idle: 8 min-idle: 2 max-wait: 5000ms
项目依赖配置(build.gradle)
plugins { id 'java' id 'org.springframework.boot' version '3.0.5' id 'io.spring.dependency-management' version '1.1.0' } group = 'com.example' sourceCompatibility = '17' repositories { mavenCentral() } ext { set('springCloudVersion', "2022.0.1") } dependencies { implementation 'org.springframework.cloud:spring-cloud-starter-gateway' // --- cache implementation 'org.springframework.boot:spring-boot-starter-cache' implementation 'com.github.ben-manes.caffeine:caffeine:3.1.5' // --- redis implementation group: 'org.springframework.data', name: 'spring-data-redis', version: '3.0.4' implementation 'org.springframework.boot:spring-boot-starter-data-redis-reactive' // implementation 'org.springframework.cloud:spring-cloud-starter-loadbalancer' implementation 'org.springframework.cloud:spring-cloud-starter-circuitbreaker-reactor-resilience4j' } dependencyManagement { imports { mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}" } } tasks.named('test') { useJUnitPlatform() }
可能的原因分析
- 配置加载异常:
- 检查
application.yml是否放置在src/main/resources目录下,Spring Boot默认只会扫描该路径下的配置文件 - 存在多环境配置冲突,比如激活了其他环境配置(如
application-dev.yml),其中Redis配置仍指向localhost - 配置文件格式错误,比如缩进不规范导致
spring.redis下的配置项未被正确解析
- 检查
- 依赖冲突或自动配置失效:
- 手动指定了
spring-data-redis版本3.0.4,而Spring Boot 3.0.5的依赖管理中默认的spring-data-redis版本可能与之不匹配,导致Redis自动配置类无法正确读取配置 - 需确认
RedisReactiveAutoConfiguration是否正常生效,可通过启动日志查看自动配置类的加载情况
- 手动指定了
- 硬编码覆盖配置:
- 自定义了Redis连接配置类,硬编码了
localhost:6379的连接信息,覆盖了yml配置 - 网关的过滤器或路由配置中,存在硬编码的Redis连接地址
- 自定义了Redis连接配置类,硬编码了
- 环境变量优先级覆盖:
- 系统环境变量或应用启动参数中设置了
spring.redis.host=localhost,其优先级高于yml配置文件
- 系统环境变量或应用启动参数中设置了
内容的提问来源于stack exchange,提问作者littleAlien
相关产品推荐
相关产品推荐

