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
相关产品推荐
相关产品推荐

