我正在进行一个Spring Boot多模块项目。我创建了如下的独立模块
com.foodshop.api
-(这是一个Spring Boot项目,起点和com.foodshop.application
和com.foodshop.persistence
都被添加为依赖项(com.foodshop.application
-(我拥有业务逻辑的应用层,这是一个库项目,这里添加了spring-boot-starter
和com.foodshop.persistence
作为依赖项(com.foodshop.persistence
-(这是存储库定义的地方,spring-boot-starter-data-mongodb
作为依赖项添加到该项目中(
上面提到的所有3个项目都封装在父pom
maven项目中,父pom.xml
如下所示;
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.foodshop</groupId>
<artifactId>foodshop-backend</artifactId>
<version>0.0.1</version>
<packaging>pom</packaging>
<properties>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
</properties>
<modules>
<module>foodshop.persistence</module>
<module>foodshop.application</module>
<module>foodshop.api</module>
</modules>
</project>
该项目构建时没有任何错误。foodshop.api
的应用程序类我注释如下,这样它就可以看到其他模块中的依赖关系
@SpringBootApplication(scanBasePackages = {"com.foodshop"})
但是当我尝试运行API项目时,看起来foodshop.application
无法找到并自动连接foodshop.persistence
中定义的存储库
我得到一个错误如下;
***************************
APPLICATION FAILED TO START
***************************
Description:
Parameter 0 of constructor in com.foodshop.application.MealManager required a bean of type 'com.foodshop.persistence.repository.MealRepository' that could not be found.
The injection point has the following annotations:
- @org.springframework.beans.factory.annotation.Autowired(required=true)
Action:
Consider defining a bean of type 'com.foodshop.persistence.repository.MealRepository' in your configuration.
我已经用@Repository
注释正确地注释了MealRepository
,但我觉得我错过了一些重要的东西。
如果我能在这个问题上得到一些帮助,我将不胜感激。
经过20多个小时的阅读并遵循反复试验的方法,我能够确定问题。根据春季官方文件
如果您的应用程序也使用JPA或Spring Data,则@EntityScan和@EnableJpaRepository(及相关(注释仅继承其未显式显示时来自@SpringBootApplication的基本包指定。也就是说,一旦指定scanBasePackageClasses或scanBasePackages,您可能还必须显式使用@EntityScan和@EnableJpaRepository及其包扫描显式配置。
由于我使用spring-boot-starter-data-mongodb
,我对Application类进行了如下注释;
@SpringBootApplication(scanBasePackages = {"com.foodshop"})
@EnableMongoRepositories(basePackages = "com.foodshop.persistence")
public class Application {
// main method goes here.
}
@EnableMongoRepositories
注释起了作用。