Spring Boot应用突然无法连接指定MongoDB,默认连接test库求助
检查Spring Boot配置优先级
Spring Boot配置加载有优先级,命令行参数、环境变量会覆盖配置文件内容。执行命令查看应用实际生效的MongoDB配置:# Linux/macOS环境 ps aux | grep your-app-name | grep mongo # Windows环境 tasklist /v /fi "imagename eq java.exe"确认是否有外部传入的
spring.data.mongodb.uri或spring.data.mongodb.database参数,覆盖了你配置文件里的设置。验证MongoDB连接字符串完整性
确保连接字符串指定了正确数据库,且认证源配置正确:mongodb://username:password@host:port/target-db?authSource=admin如果你的数据库用户是在
admin库下创建的,必须指定authSource=admin,否则会默认用目标库做认证,导致权限不足无法访问。检查MongoDB用户权限
用mongoshell登录后,执行以下命令确认用户权限:use admin db.getUser("your-app-user") // 或直接查看目标库权限 use target-db db.getRoles({showPrivileges: true})确保应用用户拥有目标库的
readWrite权限,若近期MongoDB做过权限调整,可能导致访问失败。排查自定义配置冲突
检查项目中是否有自定义的MongoDB配置类,比如MongoClient或MongoTemplate的配置代码,是否硬编码了数据库名称为test,覆盖了配置文件的设置。清理配置缓存
若使用了外部配置中心或Spring Boot DevTools,可能存在配置缓存问题:- 删除应用临时缓存目录(如
target/classes、~/.spring-boot-devtools) - 重启应用时添加
--spring.config.location参数指定配置文件绝对路径,强制加载最新配置
- 删除应用临时缓存目录(如
核对驱动与MongoDB版本兼容性
若近期MongoDB服务器升级,Spring Boot的MongoDB驱动版本过低可能引发兼容性问题。查看pom.xml或build.gradle中的驱动版本,确保与服务器版本匹配(例如MongoDB 5.x对应驱动4.x版本)。启用Debug日志定位细节
在application.properties中添加日志配置,查看连接、认证的详细过程:logging.level.org.springframework.data.mongodb=DEBUG logging.level.com.mongodb=DEBUG从日志中可确认实际使用的数据库名称、认证是否有异常,精准定位问题。
内容的提问来源于stack exchange,提问作者eyaznt

