一、报错现象
Failed to execute goal org.codehaus.mojo:exec-maven-plugin:3.6.3:exec on project ruoyi-modules-system: Command execution failed. Process exited with an error: 1Maven 只是执行器,真正的问题在 Spring Boot 启动阶段。应用没起来,Maven 才以退出码 1 结束。
二、两类最容易误导的日志
误导点 1:dynamic-datasource initial loaded [0/1] datasource
这条日志是判断 Nacos 配置是否生效的关键指标,应优先看:
日志内容 | 含义 | 下一步 |
| Nacos 里数据源配置没加载进来 | 查 Nacos 连通性、YAML 解析、编码问题 |
| 数据源配置已生效 | 数据源问题可排除,转查 MyBatis / 业务配置 |
分析思维:
看到 MyBatis / Mapper 报错 ↓ 先往回看数据源日志(不要直接改 Mapper) ↓ [0] datasource → 根因在 Nacos 配置未注入(编码、YAML、Data ID) [1] datasource → Nacos 基础配置已 OK,再查 MyBatis 专属配置典型陷阱:看到[1] datasource就认为「全都好了」,但MyBatis 的mapper-locations、type-aliases-package与数据源在同一份 Nacos YAML 里。若之前是[0]阶段,修复编码后变成[1],说明 Nacos 已能解析;若 MyBatis 仍报错,再单独核对别名、包路径,不要回头怀疑 Mapper 接口或 XML 写错。
误导点 2:Invalid bound statement: com.ruoyi.system.mapper.SysConfigMapper.selectConfigList
这类报错非常像代码问题,容易让人去改 Mapper,实际上经常是配置未加载的连锁反应:
Nacos YAML 解析失败(UTF-8/GBK) ↓ mybatis.mapper-locations 未生效 ↓ Mapper 接口能扫描到(@MapperScan 仍工作) Mapper XML 没被加载进 SqlSessionFactory ↓ 调用 selectConfigList() 时报: Invalid bound statement (not found): ...SysConfigMapper.selectConfigList为什么容易误判:
表象 | 容易得出的错误结论 | 实际情况 |
接口里有 | 方法名写错 | 方法名没问题 |
XML 里有对应 | XML 路径或 id 写错 | XML 本身没问题 |
| 编译/打包问题 | 资源已在 classpath |
报错指向具体 Mapper 方法 | 要改 Java/XML | 根因是 MyBatis 没扫到 XML |
正确排查顺序:
- 看
dynamic-datasource是[0]还是[1] - 看有没有
MalformedInputException/YAMLException - 确认 Nacos 里
mybatis.mapper-locations是否生效 - 最后才核对 Mapper 接口与 XML(通常无需改代码)
中间还出现过Could not resolve type alias 'SysDept',属于同一链条:type-aliases-package配错(如只写com.ruoyi.system.domain),与selectConfigList找不到是同类配置问题,不是实体类缺失。
三、完整排查思维链路
Maven BUILD FAILURE ↓ 看 Spring 启动日志(不看 Maven 本身) ↓ ┌─ dynamic-datasource loaded [0] ? │ ↓ 是 │ Nacos 配置未生效 → 查 YAMLException / 编码 / Data ID │ ↓ │ 连锁:无数据源 + 无 mapper-locations │ ↓ │ 误导性报错:SysConfigMapper.selectConfigList not found │ └─ dynamic-datasource loaded [1] ? ↓ 是 数据源 OK,继续看 MyBatis ↓ SysDept / selectConfigList 等报错 ↓ 查 type-aliases-package、mapper-locations(仍在 Nacos 同一份配置里) ↓ 一般不用改 Mapper 代码四、根因说明
1. Nacos 配置依赖
本地bootstrap.yml只负责连 Nacos,业务配置在远程:
配置项 | 作用 |
| 数据源(决定 |
| 决定 XML 是否加载(影响 |
| 决定 |
| 网关路由(影响 |
任意环节解析失败,都会引发下游「像代码错了」的报错。
2. UTF-8 编码问题
- Windows 默认常为GBK
- Nacos 配置含中文注释(如
# spring配置、# 认证中心) - 解析触发
MalformedInputException→整份 YAML 失效 - 表现为
[0] datasource+ 各类 MyBatis BindingException
3. 网关 404 同一性质
/auth/login返回 404 且 auth 无日志 →ruoyi-gateway-dev.yml路由未加载,与 system 模块是同一类 Nacos 编码问题。
五、解决方案
方案 A:JVM 强制 UTF-8
各服务 VM options 添加:
-Dfile.encoding=UTF-8方案 B:Nacos 配置去除中文
各*-dev.yml删除中文注释,关键项示例:
mybatis: type-aliases-package: com.ruoyi.system mapper-locations: classpath*:mapper/**/*.xml方案 C:IDE 编码统一
File Encodings全部UTF-8。
方案 D:命名空间
未配namespace即public,无需额外选择;保证 Data ID 为{application.name}-dev.yml即可。
六、验证清单
- 无
MalformedInputException dynamic-datasource initial loaded [1] datasource(不是[0])- 无
Invalid bound statement: ...SysConfigMapper.selectConfigList - 无
Could not resolve type alias 'SysDept' - 网关
/auth/login能打到 auth 服务
七、经验总结
要点 | 说明 |
|
|
Mapper 报错常是烟雾弹 |
|
同一份 Nacos YAML 管多条线 | 数据源、MyBatis、路由一起失效或一起恢复 |
Windows 开发必盯编码 | 中文注释 + GBK 是若依微服务常见坑 |
一句话:先用dynamic-datasource loaded [0/1]判断 Nacos 是否生效;SysConfigMapper.selectConfigList等 MyBatis 报错往往是配置未加载的结果而非原因;根因是Nacos 配置因 UTF-8/GBK 不一致解析失败。