Spring Cloud:无法连接Redis、MyBatisSystemException、Failed to obtain JDBC Connection。
前言
在学习 Spring Cloud 微服务架构的过程中,我遇到了一个让我排查了三四天的诡异问题。代码写着写着,突然各种服务都连不上了——Redisson 连接 Redis 失败、MyBatis 异常、JDBC 连接数据库报错。明明配置文件里的地址和密码都是正确的,但就是连不上。
最后发现,罪魁祸首竟然是 IDEA 的一个编码配置被改成了 UTF-16!
问题现象
某天启动项目时,突然报错:
1、Unable to connect to Redis server: localhost/127.0.0.1:6379 2、Access denied for user 'root'@'localhost' (using password: YES) 3、org.mybatis.spring.MyBatisSystemException 4、Failed to obtain JDBC Connection
奇怪的是:
-
配置文件中的 Redis 地址、密码完全正确
-
数据库连接手动测试可以连接
-
之前一直正常运行,没有改动过配置
排查过程
第一阶段:怀疑依赖版本
检查了 pom.xml 中的 Spring Boot、Spring Cloud、Spring Cloud Alibaba 版本兼容性:
| Spring Boot | Spring Cloud | Spring Cloud Alibaba |
|---|---|---|
| 3.2.x | 2023.0.x | 2023.0.x |
| 3.3.x | 2023.0.x | 2023.0.x |
| 3.4.x | 2024.0.x | 2023.0.3.2+ |
发现版本确实有问题,修正后仍然报错。
第二阶段:怀疑缓存问题
尝试了各种清理操作:
-
mvn clean install -U -
IDEA 的
Invalidate Caches and Restart -
删除
target目录重新编译
问题依旧。
第三阶段:怀疑环境问题
-
检查 Redis 服务状态 ✅ 正常
-
检查 MySQL 服务状态 ✅ 正常
-
检查端口占用 ✅ 正常
-
检查防火墙 ✅ 正常
第四阶段:终极排查
在排查了三四天后,我决定删除整个 .idea 文件夹,重新导入项目。
然后,问题解决了!
真相大白
打开 .idea/encodings.xml 文件,发现:
<?xml version="1.0" encoding="UTF-8"?> <project version="4"> <component name="Encoding" defaultCharsetForPropertiesFiles="UTF-8"> <!-- 各种模块编码配置,都是 UTF-8 --> <file url="file://$PROJECT_DIR$/api/src/main/java" charset="UTF-8" /> <file url="file://$PROJECT_DIR$/common/src/main/java" charset="UTF-8" /> <!-- ... --> <!-- 罪魁祸首!!! --> <file url="PROJECT" charset="UTF-16" /> </component> </project>
整个项目的编码被设置成了 UTF-16,而实际文件都是 UTF-8 编码!
为什么 UTF-16 会导致这些问题?
| 问题 | 原因 |
|---|---|
| Redis 连接失败 | 配置文件被错误解码,localhost 和密码变成乱码 |
| JDBC 连接失败 | 数据库 URL 解析错误 |
| MyBatis 异常 | XML mapper 文件编码错误 |
| YAML 解析失败 | application.yml 被错误解码 |
UTF-8 vs UTF-16 对比:
字符 "A": UTF-8: 01000001 (1 字节) UTF-16: 00000000 01000001 (2 字节) 字符 "中": UTF-8: 11100100 10111000 10101101 (3 字节) UTF-16: 01001110 00101101 (2 字节)
当 IDEA 用 UTF-16 去读取 UTF-8 编码的配置文件时,所有内容都变成了乱码!
可能的原因
-
项目多次重构/重命名:
.idea目录下有多个旧的.iml文件(Dualchoice-Backend.iml、UserHub-Backend.iml等),说明项目经历了多次重构,配置迁移过程中产生了错误。 -
IDEA 版本升级:升级过程中配置文件可能被意外修改。
-
Windows 系统编码:Windows 中文版某些工具可能默认使用 UTF-16。
-
Git 冲突:多人协作时
.idea配置冲突。
解决方案
方案一:删除 .idea 重新导入
# 删除 .idea 文件夹 Remove-Item -Recurse -Force ".idea" # 重新用 IDEA 打开项目,会自动重新生成配置
方案二:手动修复 encodings.xml
将最后一行改为:
<file url="PROJECT" charset="UTF-16" /> <!--修改前--> <file url="PROJECT" charset="UTF-8" /> <!--修改后-->
预防措施
在项目根目录创建 .gitignore:
# IDE 配置 - 不要提交到版本库 .idea/ *.iml # 编译输出 target/ *.class # 日志 logs/ *.log # 系统文件 .DS_Store Thumbs.db
IDEA 编码设置检查:
Settings → Editor → File Encodings ├── Global Encoding: UTF-8 ├── Project Encoding: UTF-8 ├── Default encoding for properties files: UTF-8 └── Create UTF-8 files: with NO BOM
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐




所有评论(0)