![](/img/trans.png)
[英]Spring can't find CrudRepository beans when using ComponentScan
[英]Spring boot doesn't find JpaRepositories in sibling-package when using @ComponentScan or can't initialize them when using @EnableJpaRepositories
我有一個由多個模塊組成的Maven項目。 其中三個模塊是
在啟動時,出現以下異常:
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [org.foo.bar.data.OrderRepository] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {}
我知道默認情況下,Spring Boot Applications只在它們自己的子包中查找它們的子包,但是在這種情況下,bean在同級包中。 我已經嘗試將@ComponentScan({"org.foo.bar.data"})
到Application類,但無濟於事。
使用@EnableJpaRepositories(basePackages = {"org.foo.bar.data"})
引發
Caused by: java.lang.IllegalArgumentException: Not an managed type: class org.foo.bar.core.model.Order
我究竟做錯了什么?
目錄樹(已修剪)如下所示:
project
├── project-core
│ └── src
│ └── main
│ └── java
│ └── org
│ └── foo
│ └── bar
│ └── core
| └── model
| └── Order.java
├── project-data
│ └── src
│ └── main
│ └── java
│ └── org
│ └── foo
│ └── bar
│ └── data
| └── OrderRepository.java
│
└── project-spring
└── src
└── main
└── java
└── org
└── foo
└── bar
└── spring
└── Application.java
OrderRepository:
public interface OrderRepository extends JpaRepository<Order, Integer> {
List<Order> findByDeliveryOverview(DeliveryOverview deliveryOverview);
List<Order> findByDeliveryOverviewAndCustomer(DeliveryOverview deliveryOverview, Customer customer);
}
應用程序
@SpringBootApplication
@ComponentScan({"org.foo.bar.data"})
public class Application {
private static final Logger log = LoggerFactory.getLogger(Application.class);
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
主要問題是您的結構。
要掃描實體,您需要在應用程序類上使用@EntityScan
並啟用存儲庫,您需要@EnableJpaRepositories
。
@SpringBootApplication
@EntityScan({"org.foo.bar.core.model"})
@EnableJpaRepositories(basePackages = {"org.foo.bar.data"})
public class Application { ... }
但是我建議將Application
類移到org.foo.bar
,然后只需要@SpringBootApplication
因為它將從該目錄開始掃描。
注釋OrderRepository
與@Repository
和刪除此聲明{"org.foo.bar.data"}
在@ComponentScan
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.