Spring Boot JPA无法获取Repository Bean:No qualifying Bean available问题
解决Spring Boot JPA无法获取Repository Bean的问题
我有一个仅包含主类、Repository和实体类的简单Spring Boot JPA项目,此前启动报错已解决,但现在在主类中无法获取Repository Bean,抛出错误:No qualifying bean of type 'com.d043114.minimalJPA.CityRepository' available
相关代码如下:
Repository代码
package com.d043114.minimalJPA; import org.springframework.data.repository.CrudRepository; import org.springframework.stereotype.Repository; @Repository public interface CityRepository extends CrudRepository<City, Long> { }
实体类代码
package com.d043114.minimalJPA; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.Table; @Entity @Table(name = "cities") public class City { @Id @GeneratedValue(strategy = GenerationType.AUTO ) private long ID; public long getID() { return ID; } public void setID(long iD) { ID = iD; } public String getName() { return name; } public void setName(String name) { this.name = name; } private String name; }
主类代码
package com.d043114.minimalJPA; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.domain.EntityScan; import org.springframework.context.ConfigurableApplicationContext; import org.springframework.context.annotation.ComponentScan; import org.springframework.data.jpa.repository.config.EnableJpaRepositories; import com.d043114.minimalJPA.CityRepository; @EnableJpaRepositories("com.d043114.minimalJPA.*") @ComponentScan(basePackages = "com.d043114.minimalJPA.*") @SpringBootApplication @EntityScan("com.d043114.minimlaJPA") public class MinimalJpaApplication { public static void main(String[] args) { ConfigurableApplicationContext appcontext = SpringApplication.run(MinimalJpaApplication.class, args); CityRepository cityRepository = appcontext.getBean(CityRepository.class ); } }
问题原因与解决方案
1. 包名拼写错误
主类中@EntityScan注解的包名写错了:com.d043114.minimlaJPA应该是com.d043114.minimalJPA(少了一个字母n),这会导致Spring无法扫描到实体类,进而影响Repository Bean的创建。
2. 多余注解导致的扫描异常
@SpringBootApplication注解本身已经包含了@ComponentScan、@EnableAutoConfiguration,并且默认会扫描主类所在包及其子包下的所有组件、Repository和实体类,所以额外添加的@EnableJpaRepositories、@ComponentScan完全是多余的,甚至可能因为通配符写法(com.d043114.minimalJPA.*)导致扫描范围出错。
修正后的主类代码
package com.d043114.minimalJPA; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.ConfigurableApplicationContext; import com.d043114.minimalJPA.CityRepository; @SpringBootApplication public class MinimalJpaApplication { public static void main(String[] args) { ConfigurableApplicationContext appcontext = SpringApplication.run(MinimalJpaApplication.class, args); CityRepository cityRepository = appcontext.getBean(CityRepository.class ); } }
修正后,Spring会自动扫描到com.d043114.minimalJPA包下的Repository和实体类,成功创建对应的Bean,就能正常获取CityRepository实例了。
内容的提问来源于stack exchange,提问作者Habi
相关产品推荐
相关产品推荐

