Spring Boot 3.0.5配置双MongoDB数据库启动报错求助
解决Spring Boot 3.0.5多MongoDB配置下的Repository Bean冲突问题
问题根源是两个@EnableReactiveMongoRepositories注解的扫描范围没有精准限制,导致Spring会在两个配置类中都扫描到同一个Repository接口,进而重复注册同名Bean。
最优解决方案:精准限定Repository扫描范围
给每个配置类的@EnableReactiveMongoRepositories指定专属扫描范围,确保各自只处理对应业务的Repository:
1. 配置RemindersConfig
@Configuration @EnableReactiveMongoRepositories( // 只扫描ReminderRepository所在的包 basePackages = "com.yourproject.repositories.reminders", // 绑定到当前配置的MongoTemplate reactiveMongoTemplateRef = "reminderMongoTemplate" ) public class RemindersConfig { // 你的Reminder MongoDB连接、MongoTemplate配置代码 }
2. 配置NotificationsConfig
@Configuration @EnableReactiveMongoRepositories( // 只扫描NotificationRepository所在的包 basePackages = "com.yourproject.repositories.notifications", // 绑定到当前配置的MongoTemplate reactiveMongoTemplateRef = "notificationMongoTemplate" ) public class NotificationsConfig { // 你的Notification MongoDB连接、MongoTemplate配置代码 }
如果不想写包路径,也可以用basePackageClasses直接指定Repository类,更安全:
basePackageClasses = ReminderRepository.class
不推荐的临时方案:开启Bean覆盖
虽然错误提示可以设置spring.main.allow-bean-definition-overriding=true来允许Bean覆盖,但这只是掩盖问题,后续可能出现依赖混淆、Repository绑定错误的隐性问题,除非没有其他办法,否则不要用。
额外验证点
确保每个配置类中定义的MongoTemplate Bean名称,和@EnableReactiveMongoRepositories里的reactiveMongoTemplateRef完全对应,这样每个Repository才能正确绑定到对应的数据库实例。
内容的提问来源于stack exchange,提问作者Shourya Sharma
相关产品推荐
相关产品推荐

