Spring Boot项目Redis连接正常但JUnit测试时连接失败求助
根据你提供的项目配置(主项目运行正常、测试时连接失败),以下是几个常见的问题点和解决思路:
测试时Redis服务未启动
主项目运行时本地Redis是正常运行的,但执行测试时可能Redis进程已停止。先通过redis-cli ping验证本地Redis是否在运行,重启Redis后再执行测试。测试环境使用了错误的配置文件
Spring Boot测试默认会加载application-test.properties/application-test.yml,如果这个文件存在且Redis的host/port配置和主配置不一致,就会导致连接失败。排查步骤:- 检查项目中是否存在测试专用配置文件;
- 若不需要单独测试配置,删除该文件,或在测试类上添加
@ActiveProfiles("default")指定使用主配置; - 若需要测试配置,确保其中的Redis参数和主配置一致。
测试类上下文配置错误
- 测试类未添加
@SpringBootTest注解:如果测试类没有加载完整的Spring上下文,Redis相关的配置Bean不会被初始化,导致无法连接。给测试类加上@SpringBootTest注解即可。 - 测试配置覆盖了Redis连接:检查测试类或
@TestConfiguration类中是否错误地重新定义了RedisConnectionFactory或RedisTemplateBean,导致连接参数被修改。
- 测试类未添加
localhost解析或端口访问限制
部分环境下localhost会解析到IPv6地址,而Redis可能只监听了IPv4的127.0.0.1。把spring.data.redis.host改成127.0.0.1再测试。另外,检查本地防火墙是否阻止了测试进程访问6379端口(少数安全软件会对测试进程做特殊限制)。Redis自动配置被意外排除
检查测试类是否使用了@EnableAutoConfiguration(exclude = ...)排除了RedisAutoConfiguration或RedisRepositoriesAutoConfiguration,如果排除了这些配置,Spring不会创建Redis连接相关的Bean,自然无法连接。测试依赖冲突
虽然主依赖没问题,但测试依赖可能和Redis客户端(lettuce/jedis)产生冲突。执行gradle dependencies查看依赖树,排查是否有重复或冲突的Redis相关依赖,必要时排除冲突依赖。
内容的提问来源于stack exchange,提问作者Anand Rockzz

