我是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注释,但这没有提供任何解决方案。 知道我错过了什么吗?每当我将接口放入控制器所在的包中时,一切顺利。
答案 0 :(得分:8)
如果您在另一个软件包中有Spring数据@Repositories
,则必须明确@EnableJpaRepositories
(或用您自己的风格替换" Jpa")。 Boot从包含@EnableAutoConfiguration
的包中获取默认值,因此也可以只移动该类。
答案 1 :(得分:0)
Spring Boot提供启用存储库的注释。 因此,只要有人使用任何存储库(它可以是JPARepository,CassandraReposotory),就应该在Application Class本身中启用它。
示例:强>
@EnableCassandraRepositories("package name")
@EnableJpaRepositories("package name")
在提供上述注释之后,容器也负责为存储库注入bean。
答案 2 :(得分:0)
您必须使用以下两个注释
@EnableJpaRepositories(basePackages = "package-name")
@EntityScan(basePackages = "package-name")
如果主类位于某个不同的包中,EnableJpaRepositories将启用存储库。 您还需要使用EntityScan指向您拥有实体bean的包,否则它将失败,而Bean不是托管类型'错误。