Spring项目中找不到ConfirmationTokenRepository类型Bean的问题求助
核心问题在于Spring容器无法识别并创建ConfirmationTokenRepository类型的Bean,这是因为你的项目同时混用了MongoDB和JPA两种数据存储技术,但只配置了MongoDB仓库的自动扫描,漏掉了Spring Data JPA的仓库支持配置。
具体问题点
你的主应用类mainClass仅添加了@EnableMongoRepositories注解——这个注解负责启用MongoDB仓库的自动配置,但ConfirmationTokenRepository是基于Spring Data JPA的仓库(继承自CrudRepository,对应的ConfirmationToken实体使用了javax.persistence系列注解),Spring没有收到扫描JPA仓库的指令,自然无法生成对应的Bean。
解决方案步骤
为主应用类添加JPA仓库启用注解
在mainClass上补充@EnableJpaRepositories注解,指定JPA仓库所在的包路径(和Mongo仓库一致,都是com.main.mytest.repository):package com.main.mytest; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.data.jpa.repository.config.EnableJpaRepositories; import org.springframework.data.mongodb.repository.config.EnableMongoRepositories; import org.springframework.boot.autoconfigure.domain.EntityScan; import org.springframework.context.annotation.Bean; import org.springframework.boot.CommandLineRunner; @SpringBootApplication @EnableMongoRepositories("com.main.mytest.repository") // 启用MongoDB仓库支持 @EnableJpaRepositories("com.main.mytest.repository") // 新增:启用JPA仓库支持 @ComponentScan(basePackages = {"com.main.mytest"}) @EntityScan("com.main.mytest.model") public class mainClass{ // 原有代码保持不变... }确认
ConfirmationTokenRepository的注解正确性
再次检查你的ConfirmationTokenRepository接口,确保@Repository注解导入的是Spring官方的org.springframework.stereotype.Repository,避免导错包导致Spring无法识别:package com.main.mytest.repository; import org.springframework.data.repository.CrudRepository; import org.springframework.stereotype.Repository; // 确认是这个包 import com.main.mytest.model.ConfirmationToken; @Repository public interface ConfirmationTokenRepository extends CrudRepository<ConfirmationToken, String> { ConfirmationToken findByConfirmationToken(String confirmationToken); }检查JPA相关依赖是否齐全
确保你的项目依赖中包含Spring Data JPA和对应数据库的驱动,比如Maven的pom.xml中需要有:<!-- Spring Data JPA 依赖 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <!-- 以MySQL为例的数据库驱动 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency>
额外说明
因为你的项目同时使用MongoDB和JPA两种存储技术,必须分别启用对应的仓库支持,Spring才能正确扫描并生成两种类型的仓库Bean。之前只配置了MongoDB的部分,漏掉JPA的配置,这就是找不到ConfirmationTokenRepository的根本原因。
内容的提问来源于stack exchange,提问作者user13578

