JDBC连接本地MongoDB报ClassNotFoundException如何解决
问题:JDBC连接本地MongoDB失败
问题表现
- 连接时抛出异常:
java.lang.ClassNotFoundException: mongodb.jdbc.MongoDriver - 异常触发场景:执行驱动加载代码时抛出
- 已尝试排查手段:分别注释单个/同时注释两个MongoDB相关依赖、确认依赖为最新版本、检索公开解决方案,均未解决问题。
现有配置
Maven依赖
<dependencies> <dependency> <groupId>org.mongodb</groupId> <artifactId>mongodb-driver-sync</artifactId> <version>4.6.0</version> </dependency> <dependency> <groupId>org.mongodb</groupId> <artifactId>mongodb-jdbc</artifactId> <version>2.0.0</version> </dependency> </dependencies>
业务代码
public static void main(String[] args) { try { // 账号corpus,密码the+password Class.forName("com.mongodb.jdbc.MongoDriver"); Connection connection = DriverManager.getConnection( "jdbc:mongo://localhost:27017/corpus_test", "corpus", "the+password"); } catch (SQLException e) { System.out.println(e.getMessage()); } catch (ClassNotFoundException e) { throw new RuntimeException(e); } }
修复方案
按以下步骤逐一排查修复即可:
- 清理旧编译产物:你贴出的代码里加载的驱动类是
com.mongodb.jdbc.MongoDriver,但报错提示找不到mongodb.jdbc.MongoDriver,说明运行的是历史编译的旧字节码,先执行项目mvn clean命令清空target目录,重新编译后再运行,避免旧代码残留。 - 修正JDBC连接URL:MongoDB官方JDBC驱动的URL前缀为
jdbc:mongodb://,你当前写的jdbc:mongo://是错误前缀,修改后的连接URL为jdbc:mongodb://localhost:27017/corpus_test;如果你的corpus账号是创建在admin库下,需要追加认证源参数:jdbc:mongodb://localhost:27017/corpus_test?authSource=admin - 修复依赖版本不兼容问题:
mongodb-jdbc 2.0.0版本要求依赖mongodb-driver-sync版本不低于4.7.0,你当前引入的4.6.0版本存在兼容性问题,将mongodb-driver-sync的版本升级到4.7.0及以上即可,不需要删除或注释任何一个依赖,Maven会自动处理依赖传递。 - 移除冗余的驱动加载代码:JDBC 4.0及以上版本已经支持通过SPI机制自动注册驱动,不需要手动编写
Class.forName("com.mongodb.jdbc.MongoDriver")加载驱动,这行代码可以直接删除,避免后续类名写错触发类找不到异常。
内容的提问来源于stack exchange,提问作者Morkus
相关产品推荐
相关产品推荐

