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

Spring Boot新增Repository后无法找到GameRepository Bean的问题

问题:Spring无法创建GameRepository类型的Bean

相关代码

GameRepository.java

@Repository
public interface GameRepository extends MongoRepository<Game, String> {
}

GameRepositoryReactive.java

@Repository
public interface GameRepositoryReactive extends ReactiveMongoRepository<Game, String> {
}

Game.java

@Data
@AllArgsConstructor
@NoArgsConstructor
@Document(collection = "games")
public class Game{
    @Id
    String id;
    String name;
}

GameService.java

private final GameRepositoryReactive gameRepositoryReactive;
private final GameRepository gameRepository;

public GameService(GameRepository gameRepository, GameRepositoryReactive gameRepositoryReactive) {
    this.gameRepositoryReactive = gameRepositoryReactive;
    this.gameRepository = gameRepository;
}

错误信息

com.example.service.GameService构造函数的第0个参数需要类型为'com.example.repository.GameRepository'的bean,但未找到。

问题背景

仅使用ReactiveMongoRepository时无此错误,同时引入阻塞式MongoRepository和响应式ReactiveMongoRepository时触发该问题。

原因分析

Spring Boot在同时引入阻塞式MongoDB依赖(spring-boot-starter-data-mongodb)和响应式MongoDB依赖(spring-boot-starter-data-mongodb-reactive)时,默认优先配置响应式Mongo相关Bean,不会自动创建阻塞式的MongoTemplate及对应Repository支持,导致MongoRepository接口无法被实例化为Bean。

解决方案

方案1:显式配置阻塞式MongoRepository支持

创建配置类,手动开启阻塞式MongoRepository扫描并配置MongoTemplate:

@Configuration
@EnableMongoRepositories(
    basePackages = "com.example.repository",
    repositoryFactoryBeanClass = MongoRepositoryFactoryBean.class
)
public class BlockingMongoConfig {
    @Bean
    public MongoTemplate mongoTemplate(MongoDatabaseFactory databaseFactory) {
        return new MongoTemplate(databaseFactory);
    }
}

若需确保响应式Repository正常生效,可单独配置响应式Repository扫描:

@Configuration
@EnableReactiveMongoRepositories(
    basePackages = "com.example.repository",
    repositoryFactoryBeanClass = ReactiveMongoRepositoryFactoryBean.class
)
public class ReactiveMongoConfig {
    @Bean
    public ReactiveMongoTemplate reactiveMongoTemplate(ReactiveMongoDatabaseFactory databaseFactory) {
        return new ReactiveMongoTemplate(databaseFactory);
    }
}

方案2:移除不必要的阻塞式Repository

若业务无需阻塞式数据库操作,直接删除GameRepository接口,并修改GameService移除对应依赖:

private final GameRepositoryReactive gameRepositoryReactive;

public GameService(GameRepositoryReactive gameRepositoryReactive) {
    this.gameRepositoryReactive = gameRepositoryReactive;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 01:02:52