升级至Spring Boot 3.2.1与Java 21后Repository Bean无法识别启动失败
问题:升级至Java 21 + Spring Boot 3.2.1后CrudRepository接口无法被识别为Bean
将项目从Java 11、Spring Boot 2.4.5升级到Java 21、Spring Boot 3.2.1后,继承CrudRepository的接口无法被识别为Spring Bean,项目初始化阶段启动失败,报错信息如下:
A component required a bean of type 'com.zoominfo.dozi.passivelogin.repo.CompanyRepo' that could not be found
项目依赖配置(Gradle)
dependencies { implementation 'net.logstash.logback:logstash-logback-encoder:7.3' implementation 'org.apache.logging.log4j:log4j-core:2.15.0' implementation 'org.apache.logging.log4j:log4j-api:2.15.0' implementation 'org.apache.logging.log4j:log4j-to-slf4j:2.15.0' implementation 'org.springframework.boot:spring-boot-starter-web' implementation 'org.springframework.boot:spring-boot-starter-data-jpa' implementation 'org.springframework.boot:spring-boot-starter-data-redis' implementation 'org.springframework.boot:spring-boot-starter-tomcat' implementation 'com.google.cloud.sql:mysql-socket-factory:1.6.2' implementation 'com.jayway.jsonpath:json-path:2.4.0' implementation 'com.onelogin:java-saml-core:2.9.0' implementation 'com.onelogin:java-saml:2.9.0' implementation 'com.auth0:java-jwt:3.18.2' implementation 'commons-lang:commons-lang:2.6' implementation 'commons-codec:commons-codec:1.15' implementation 'io.github.openfeign:feign-core:10.11' implementation 'io.github.openfeign:feign-httpclient:10.11' implementation 'io.github.openfeign:feign-jackson:10.11' implementation 'io.github.openfeign:feign-slf4j:10.11' implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.5.0' implementation 'redis.clients:jedis:3.2.0' implementation 'org.projectlombok:lombok:1.18.30' implementation 'com.google.guava:guava:30.1.1-jre' implementation 'com.github.michaelgantman:MgntUtils:1.7.0.1' annotationProcessor 'org.projectlombok:lombok:1.18.30' runtimeOnly 'mysql:mysql-connector-java:8.0.22' testImplementation 'org.springframework.boot:spring-boot-starter-test' testImplementation 'io.projectreactor:reactor-test:3.3.9.RELEASE' testImplementation 'org.mockito:mockito-junit-jupiter:3.6.28' testImplementation 'com.github.tomakehurst:wiremock-standalone:3.0.1' testAnnotationProcessor 'org.projectlombok:lombok:1.18.30' }
Spring Boot版本配置(Gradle)
plugins { id 'org.springframework.boot' version '3.2.1' id 'java' }
可能的原因及解决方案
1. 组件扫描范围未覆盖Repository包
Spring Boot 3.x对组件扫描的默认逻辑可能因升级发生变化,需确保Repository所在包被Spring扫描到:
- 在启动类的
@SpringBootApplication注解中显式指定扫描包:@SpringBootApplication(scanBasePackages = {"com.zoominfo.dozi.passivelogin"}) - 或者在Repository接口上添加
@Repository注解(虽然Spring Data通常自动识别,但升级后显式标注可避免扫描遗漏)。
2. 依赖版本不兼容
部分依赖版本过低,与Spring Boot 3.2.1、Java 21不兼容,需升级:
- Feign:替换为Spring Cloud OpenFeign(适配Spring Boot 3),或升级原生Feign到12.x+版本(如12.4)。
- Jedis:升级到4.x系列(如4.4.6),确保支持Java 21和Spring Boot 3。
- MySQL驱动:升级到8.0.30+版本,适配Java 21。
- Java SAML:升级com.onelogin:java-saml到3.x版本,兼容Spring Boot 3。
3. Java版本配置缺失
确保Gradle中明确指定Java 21作为编译和运行版本:
java { sourceCompatibility = JavaVersion.VERSION_21 targetCompatibility = JavaVersion.VERSION_21 }
4. Repository接口定义问题
检查Repository接口的正确性:
- 确保正确继承
CrudRepository,泛型参数无误(如public interface CompanyRepo extends CrudRepository<Company, Long>)。 - 实体类需标注
@Entity和@Id注解,确保JPA能识别实体。
5. 自动配置被禁用
检查application.properties/yml中是否存在禁用Spring Data JPA自动配置的配置,如spring.autoconfigure.exclude,确保未排除org.springframework.boot.autoconfigure.data.jpa.JpaRepositoriesAutoConfiguration。
内容的提问来源于stack exchange,提问作者Michael Gantman
相关产品推荐
相关产品推荐

