Spring Boot迁移WebFlux后无法自动注入@Repository接口
问题根源
你误用了@EnableJpaRepositories注解——这个注解是给JPA(关系型数据库)仓库用的,但你的UniversityRepository继承的是ReactiveMongoRepository(MongoDB响应式仓库),两者完全不兼容,导致Spring无法自动生成Repository的Bean。另外还要确保Spring能扫描到你的Repository接口。
具体修复步骤
替换仓库启用注解:在Spring Boot主启动类上,把
@EnableJpaRepositories换成@EnableReactiveMongoRepositories。如果你的Repository不在主启动类的子包下,必须指定扫描路径:@SpringBootApplication @EnableReactiveMongoRepositories(basePackages = ["demo.university"]) class YourApplication fun main(args: Array<String>) { runApplication<YourApplication>(*args) }确认Repository配置正确性:你的
UniversityRepository已经正确标注@Repository并继承ReactiveMongoRepository,这部分没问题。如果CustomUniversityRepository有实现类,要给实现类加@Component或@Repository注解,确保Spring能扫描到。检查包扫描范围:如果主启动类在
demo包下,而Repository在demo.university子包,Spring默认会自动扫描,无需额外配置;如果包结构不满足这个关系,一定要在@EnableReactiveMongoRepositories里明确basePackages。清理错误配置:别再给Repository接口加
@Bean(接口不能用这个注解),彻底移除@EnableJpaRepositories相关配置。
验证
重启项目后,Spring会自动为ReactiveMongoRepository接口生成代理实现类并注入到UniversityService中,Consider defining a bean of type 'demo.university.UniversityRepository'的错误应该会消失。
内容的提问来源于stack exchange,提问作者Laughing_Man

