Spring Boot启动报错:找不到UserRepository Bean的排查方案
Spring Boot启动错误:找不到UserRepository Bean
启动Spring Boot项目时出现Bean注入失败错误,核心问题为CustomUserDetailsService构造函数依赖的com.example.demo.repository.UserRepository类型Bean不存在。以下是项目的pom.xml文件、启动日志,以及针对性排查步骤:
pom.xml代码
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>3.2.3</version> <relativePath/> <!-- lookup parent from repository --> <configuration> <mainClass>com.example.demo.DemoApplication</mainClass> </configuration> </parent> <groupId>com.example</groupId> <artifactId>demo</artifactId> <version>0.0.1-SNAPSHOT</version> <name>demo</name> <description>Demo project for Spring Boot</description> <properties> <java.version>21</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency> <dependency> <groupId>jakarta.servlet</groupId> <artifactId>jakarta.servlet-api</artifactId> <version>5.0.0</version> <!-- or the appropriate version --> <scope>provided</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-webflux</artifactId> </dependency> <dependency> <groupId>com.mysql</groupId> <artifactId>mysql-connector-j</artifactId> <scope>runtime</scope> </dependency> <dependency> <groupId>javax.persistence</groupId> <artifactId>javax.persistence-api</artifactId> <version>2.2</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>io.projectreactor</groupId> <artifactId>reactor-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.20</version> <scope>provided</scope> </dependency> <!-- Maven --> <dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-jpa</artifactId> <version>2.5.5</version> </dependency> <dependency> <groupId>jakarta.validation</groupId> <artifactId>jakarta.validation-api</artifactId> <version>3.0.0</version> <!-- Use the latest version here --> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
启动日志
/Desktop/beckend/java_back$ /usr/bin/env /usr/lib/jvm/java-21-openjdk-amd64/bin/java -agentlib:jdwp=transport=dt_socket,server=n,suspend=y,address=localhost:42975 @/tmp/cp_2akgesudot11bi0kws3dn676g.argfile com.example.demo.DemoApplication Error: could not open `/tmp/cp_2akgesudot11bi0kws3dn676g.argfile' vansh@satellite:~/Desktop/beckend/java_back$ cd /home/vansh/Desktop/beckend/java_back/demo ; /usr/bin/env /usr/lib/jvm/java-21-openjdk-amd64/bin/java -agentlib:jdwp=transport=dt_socket,server=n,suspend=y,address=localhost:46277 @/tmp/cp_ej0uoxrfv0buwdyy0i6h7o7rl.argfile com.example.demo.DemoApplication . ____ _ __ _ _ /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \\/ ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v3.2.3) 2024-03-11T16:16:05.139+05:30 INFO 237523 --- [ main] com.example.demo.DemoApplication : Starting DemoApplication using Java 21.0.2 with PID 237523 (/home/vansh/Desktop/beckend/java_back/demo/target/classes started by vansh in /home/vansh/Desktop/beckend/java_back/demo) 2024-03-11T16:16:05.144+05:30 INFO 237523 --- [ main] com.example.demo.DemoApplication : No active profile set, falling back to 1 default profile: "default" 2024-03-11T16:16:07.100+05:30 WARN 237523 --- [ main] onfigReactiveWebServerApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'springSecurity': Unsatisfied dependency expressed through field 'userDetailsService': Error creating bean with name 'customUserDetailsService' defined in file [/home/vansh/Desktop/beckend/java_back/demo/target/classes/com/example/demo/security/CustomUserDetailsService.class]: Unsatisfied dependency expressed through constructor parameter 0: No qualifying bean of type 'com.example.demo.repository.UserRepository' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {} 2024-03-11T16:16:07.143+05:30 INFO 237523 --- [ main] .s.b.a.l.ConditionEvaluationReportLogger : Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. 2024-03-11T16:16:07.237+05:30 ERROR 237523 --- [ main] o.s.b.d.LoggingFailureAnalysisReporter : *************************** APPLICATION FAILED TO START *************************** Description: Parameter 0 of constructor in com.example.demo.security.CustomUserDetailsService required a bean of type 'com.example.demo.repository.UserRepository' that could not be found. The injection point has the following annotations: - @org.springframework.beans.factory.annotation.Autowired(required=true) Action: Consider defining a bean of type 'com.example.demo.repository.UserRepository' in your configuration. vansh@satellite:~/Desktop/beckend/java_back/demo$
排查步骤
- 检查组件扫描范围:确保主启动类
DemoApplication所在包能覆盖UserRepository所在的com.example.demo.repository包,可通过@SpringBootApplication(scanBasePackages = "com.example.demo")显式指定扫描范围;如果是Spring Data JPA接口,需确保主启动类标注@EnableJpaRepositories(basePackages = "com.example.demo.repository")。 - 校验Repository接口注解:如果
UserRepository是Spring Data JPA接口,需标注@Repository或@RepositoryRestResource,且继承JpaRepository等Spring Data规范接口,Spring会自动生成代理Bean。 - 修正依赖版本冲突:当前Spring Boot 3.2.3对应Spring Data JPA 3.x版本,手动引入的
spring-data-jpa:2.5.5版本不兼容,需移除该依赖,使用Spring Boot Parent管理的版本;同时javax.persistence-api需替换为jakarta.persistence-api(Spring Boot 3.x基于Jakarta EE 9+规范)。 - 验证Bean定义一致性:若通过XML配置Bean,确保
id属性与注入时的名称匹配;避免混用XML与Java配置导致多上下文问题。 - 审查注入点配置:检查
CustomUserDetailsService构造函数的注入注解,确保没有自定义限定符导致Bean匹配失败。 - 调试Bean创建流程:添加启动参数
--debug查看条件评估报告,或设置断点追踪UserRepositoryBean的创建过程,确认是否因初始化异常导致Bean未生成。
内容的提问来源于stack exchange,提问作者Vansh Goel
相关产品推荐
相关产品推荐

