You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot多数据源配置报错:无法加载mongodb.jdbc.MongoDriver驱动类

Spring Boot双数据源配置:MongoDB驱动加载错误排查与解决方案

我明白被困在这个问题两天有多沮丧——这种明明换个数据库就正常,偏偏卡在MongoDB上的问题最磨人。咱们先抓核心:MongoDB和PostgreSQL/MySQL这类关系型数据库的数据源逻辑完全不同,你之前用HikariCP来配置MongoDB的方式本身就有问题,这也是驱动加载报错的根源。

为什么换MySQL正常但MongoDB不行?

HikariCP是JDBC连接池,专门为关系型数据库的JDBC规范设计。MySQL和PostgreSQL都遵循JDBC标准,所以Hikari能正常加载它们的驱动;但MongoDB是文档型数据库,它的原生驱动并不属于JDBC体系,强行用Hikari的JDBC配置方式去套,自然会出现“找不到驱动”的错误。

正确的双数据源配置方案

下面是一步一步的正确配置方式,分开处理PostgreSQL(用HikariCP)和MongoDB(用Spring Data MongoDB原生支持):

1. 确保依赖正确

在你的pom.xml(或build.gradle)里,同时引入PostgreSQL+JDBC/Hikari和Spring Data MongoDB的依赖:

<!-- PostgreSQL + HikariCP -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
    <groupId>org.postgresql</groupId>
    <artifactId>postgresql</artifactId>
    <scope>runtime</scope>
</dependency>

<!-- Spring Data MongoDB -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>

2. 修正application.properties配置

把原来错误的MongoDB JDBC配置换成Spring Data MongoDB的原生配置,PostgreSQL的Hikari配置保留:

# PostgreSQL 数据源(HikariCP)
spring.datasource.one.url=jdbc:postgresql://localhost:5432/your_pg_db
spring.datasource.one.username=pg_user
spring.datasource.one.password=pg_pass
spring.datasource.one.driver-class-name=org.postgresql.Driver
spring.datasource.one.hikari.maximum-pool-size=10
spring.datasource.one.hikari.connection-timeout=30000

# MongoDB 数据源(原生配置)
spring.data.mongodb.uri=mongodb://localhost:27017/your_mongo_db
# 如果MongoDB开启了认证,添加以下配置
spring.data.mongodb.username=mongo_user
spring.data.mongodb.password=mongo_pass
spring.data.mongodb.authentication-database=admin

⚠️ 注意:不要给MongoDB配置任何spring.datasource.*相关属性,那是给JDBC数据库用的!

3. 配置数据源对应的配置类

分别为PostgreSQL和MongoDB创建配置类,隔离两个数据源的操作:

PostgreSQL配置类
@Configuration
@EnableJdbcRepositories(
    basePackages = "com.yourproject.repository.postgres", // PG仓库所在包
    jdbcTemplateRef = "pgJdbcTemplate"
)
public class PostgresDataSourceConfig {

    @Bean
    @ConfigurationProperties(prefix = "spring.datasource.one")
    public DataSource postgresDataSource() {
        return DataSourceBuilder.create().type(HikariDataSource.class).build();
    }

    @Bean(name = "pgJdbcTemplate")
    public JdbcTemplate pgJdbcTemplate(@Qualifier("postgresDataSource") DataSource dataSource) {
        return new JdbcTemplate(dataSource);
    }
}
MongoDB配置类
@Configuration
@EnableMongoRepositories(
    basePackages = "com.yourproject.repository.mongo", // MongoDB仓库所在包
    mongoTemplateRef = "mongoTemplate"
)
public class MongoDataSourceConfig {

    @Bean
    @ConfigurationProperties(prefix = "spring.data.mongodb")
    public MongoClientSettings mongoClientSettings() {
        return MongoClientSettings.builder().build();
    }

    @Bean
    public MongoClient mongoClient(MongoClientSettings settings) {
        return MongoClients.create(settings);
    }

    @Bean(name = "mongoTemplate")
    public MongoTemplate mongoTemplate(@Qualifier("mongoClient") MongoClient mongoClient) {
        return new MongoTemplate(mongoClient, "your_mongo_db"); // 填你的MongoDB库名
    }
}

常见错误排查点

如果你还是遇到问题,检查这几个地方:

  • 有没有残留的MongoDB JDBC配置:比如spring.datasource.two.driver-class-name这类属性,一定要删掉
  • 版本兼容性:Spring Boot 3.x需要MongoDB Java Driver 4.x及以上,Spring Boot 2.x对应3.x版本的驱动,版本不匹配会导致驱动加载失败
  • 依赖冲突:检查mvn dependency:tree(或Gradle的依赖树),有没有同时引入MongoDB JDBC驱动和Spring Data MongoDB,两者可能冲突

替代方案:MongoDB JDBC驱动(不推荐)

如果你因为某些原因必须用JDBC方式连接MongoDB,可以尝试引入MongoDB官方JDBC驱动,但这种方式不如Spring Data MongoDB适配Spring Boot:

  1. 引入依赖:
<dependency>
    <groupId>org.mongodb</groupId>
    <artifactId>mongodb-jdbc-driver</artifactId>
    <version>2.0.0</version> <!-- 用对应版本 -->
</dependency>
  1. 配置JDBC格式的数据源:
spring.datasource.two.url=jdbc:mongodb://localhost:27017/your_mongo_db
spring.datasource.two.username=mongo_user
spring.datasource.two.password=mongo_pass
spring.datasource.two.driver-class-name=com.mongodb.jdbc.MongoDriver

但还是强烈建议用Spring Data MongoDB的原生方式,更符合Spring Boot的生态。

希望这些步骤能帮你解决问题!如果还有具体的报错信息,可以贴出来咱们再细化排查。

内容的提问来源于stack exchange,提问作者Kunle Ajiboye

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 09:19:34