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

SpringBoot添加第二个MongoDB后无法找到Mongo Repository问题

问题诊断与解决方案

看起来你遇到的核心问题是Spring无法扫描并实例化你的MAPRepository,结合你的代码和错误日志,我帮你梳理几个关键的错误点和修复步骤:

1. 错误使用@Qualifier注入Repository

你在TestService里给MAPRepository加了@Qualifier(value = "serverMongoTemplate"),这是完全错误的:

  • serverMongoTemplate是你定义的MongoTemplate的Bean名称,而不是MAPRepository的Bean名
  • 注入Repository时,不需要用这个注解来关联MongoTemplate,关联逻辑应该放在@EnableMongoRepositories的配置里

直接去掉这个@Qualifier,Service的注入代码改成:

@Service
public class TestService {
    @Autowired
    private MAPRepository mrepo;

    // ... 你的业务代码
}

2. 修正@EnableMongoRepositories的配置位置和参数

你把@EnableMongoRepositories加在了Service类上,而且没有指定Repository的扫描包,这会导致Spring找不到位于其他包下的MAPRepository。正确的做法是把这个注解移到你的Mongo配置类上,并明确指定扫描范围:

修改ServerMongoConfig类:

@Configuration
@ConfigurationProperties(prefix="server.mongodb")
@EnableMongoRepositories(
    basePackages = "testpkg.repo", // 替换成你的Repository实际所在的包路径
    mongoTemplateRef = "serverMongoTemplate" // 关联到你的自定义MongoTemplate
)
public class ServerMongoConfig extends AbstractMongoConfig {
    @Primary
    @Override
    @Bean(name="serverMongoTemplate")
    public MongoTemplate getMongoTemplate() throws Exception {
        return new MongoTemplate(mongoDbFactory());
    }
}

同时,记得移除TestService上的@EnableMongoRepositories注解。

3. 额外排查点

如果按照上面的步骤修改后还是有问题,可以检查以下几点:

  • 包扫描范围:确认你的主启动类的@SpringBootApplication或@ComponentScan覆盖了Repository所在的包。如果没有,需要在主类上补充:
    @SpringBootApplication(scanBasePackages = {"testpkg.repo", "testpkg.svc"})
    public class YourApplication {
        public static void main(String[] args) {
            SpringApplication.run(YourApplication.class, args);
        }
    }
    
  • 多数据源冲突:如果你还有其他Mongo配置类,每个配置类都需要对应自己的@EnableMongoRepositories,可以通过basePackages或者repositoryImplementationPostfix来区分不同数据源的Repository,避免Bean冲突。
  • 开启调试日志:添加以下配置到application.properties,可以查看Spring Bean创建的详细过程,确认MAPRepository是否被扫描到:
    logging.level.org.springframework.beans.factory=DEBUG
    logging.level.org.springframework.data.mongodb=DEBUG
    

为什么之前单数据源正常?

在你添加ServerMongoConfig之前,Spring Boot会自动配置默认的MongoTemplate和扫描所有@Repository注解的类。但当你自定义了Mongo配置后,默认的自动配置会被覆盖,此时必须明确指定@EnableMongoRepositories的扫描范围和关联的MongoTemplate,否则Spring无法找到你的Repository。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:23:09