我是Spring Boot的新手,想要从Rest Controller中的不同包中自动装配存储库。似乎当我将接口和实现放在不同的包中时,实际控制器的自动装置似乎失败了。
引起:org.springframework.beans.factory.NoSuchBeanDefinitionException:找不到[com.acme.repository.RawDataRepository]类型的限定bean用于依赖:
控制器:
package com.acme.controller;
import com.acme.repository.RawDataRepository;
// imports removed!
@RestController
@EnableAutoConfiguration
@ComponentScan("com.acme")
public class DataCollectionController {
@Autowired
private RawDataRepository repository;
// code removed!
}
我试图使用@ComponentScan注释,但这没有给出解决方案。知道我错过了什么吗?每当我将接口放入控制器所在的包中时,一切顺利。
如果你有一个不同的包中的Spring Data @Repositories
你必须明确@EnableJpaRepositories
(或用你自己的味道取代“Jpa”)。 Boot从包含@EnableAutoConfiguration
的包中获取默认值,因此它也可以移动该类。
Spring Boot提供启用存储库的注释。因此,只要有人使用任何存储库(它可以是JPARepository,CassandraReposotory),就应该在Application Class本身中启用它。
例:
@EnableCassandraRepositories("package name")
@EnableJpaRepositories("package name")
在提供上述注释之后,容器也负责为存储库注入bean。
您必须使用以下两个注释
@EnableJpaRepositories(basePackages = "package-name")
@EntityScan(basePackages = "package-name")
如果主类位于某个不同的包中,EnableJpaRepositories将启用存储库。您还需要使用EntityScan指向包含实体bean的包,否则它将因“Bean不是托管类型”错误而失败。