Mongo查询偶发IncorrectResultSizeDataAccessException,Admin面板登录失败
解决Spring的IncorrectResultSizeDataAccessException登录异常
Hey,这个异常我熟!IncorrectResultSizeDataAccessException本质就是Spring执行查询时,预期刚好1条结果,但实际返回了0条或者多条——结合你两台正常、第三台同步分支后出问题的场景,大概率是数据、配置或者分支变更的锅,给你一步步排查的思路:
先排查MongoDB数据问题
这是最常见的原因,直接用MongoDB Shell登录第三台连接的数据库,执行查询命令:# 替换成你的用户表名,比如users/admin_users db.your_user_collection.find({email: "admin"})看返回结果:
- 如果返回0条:说明第三台的MongoDB里压根没有admin账号,要么手动插入(从正常机器导出数据导入),要么检查数据初始化脚本是不是没在第三台执行;
- 如果返回多条:说明存在重复的admin邮箱账号,删掉多余的只保留一条即可。
另外还要确认第三台的配置文件里,MongoDB的连接地址、数据库名是不是和另外两台完全一致,别连错了实例!
检查分支同步后的代码/配置变更
同步最新分支后,可能有代码或配置的改动影响了查询逻辑:- 看看最近的提交记录,有没有修改用户查询的代码?比如原本用的是
findOneByEmail(返回Optional,空的话只会返回null),改成了getByEmail(必须返回1条,否则直接抛异常); - 检查Gulp构建后的前端/后端配置文件:第三台构建时是不是加载了错误的环境配置?比如开启了额外的用户状态过滤(比如只查激活状态的用户,但admin账号没激活)?
- 看看最近的提交记录,有没有修改用户查询的代码?比如原本用的是
核对依赖版本差异
有时候分支同步会带来依赖版本的更新,导致查询行为变化:- 对比另外两台的
package.json(前端)和pom.xml/build.gradle(后端Spring项目),看看第三台的Spring Data MongoDB、Node.js依赖版本是不是和正常机器一致; - 尝试重新安装依赖:前端执行
npm install,后端执行mvn clean install(或对应构建命令),排除依赖缓存的问题。
- 对比另外两台的
临时调试定位
如果以上都没找到问题,在后端代码里加个日志打印查询结果数量,快速定位问题:// 在Service或Controller的登录逻辑里添加 long adminCount = userRepository.countByEmail("admin"); log.info("Admin account query count: {}", adminCount);运行后看日志,就能明确是返回0条还是多条,缩小排查范围。
内容的提问来源于stack exchange,提问作者Georgi Michev
相关产品推荐
相关产品推荐

