如何使用Spring Boot从不同的包中自动装配存储库接口?

问题描述 投票:3回答:3

我是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 spring-data spring-boot
3个回答
8
投票

如果你有一个不同的包中的Spring Data @Repositories你必须明确@EnableJpaRepositories(或用你自己的味道取代“Jpa”)。 Boot从包含@EnableAutoConfiguration的包中获取默认值,因此它也可以移动该类。


0
投票

Spring Boot提供启用存储库的注释。因此,只要有人使用任何存储库(它可以是JPARepository,CassandraReposotory),就应该在Application Class本身中启用它。

例:

@EnableCassandraRepositories("package name")
@EnableJpaRepositories("package name")

在提供上述注释之后,容器也负责为存储库注入bean。


0
投票

您必须使用以下两个注释

@EnableJpaRepositories(basePackages = "package-name")
@EntityScan(basePackages = "package-name")

如果主类位于某个不同的包中,EnableJpaRepositories将启用存储库。您还需要使用EntityScan指向包含实体bean的包,否则它将因“Bean不是托管类型”错误而失败。

© www.soinside.com 2019 - 2024. All rights reserved.