将存储库自动连接到Spring Boot中的库项目



我正在进行一个Spring Boot多模块项目。我创建了如下的独立模块

  • com.foodshop.api-(这是一个Spring Boot项目,起点和com.foodshop.applicationcom.foodshop.persistence都被添加为依赖项(
  • com.foodshop.application-(我拥有业务逻辑的应用层,这是一个库项目,这里添加了spring-boot-startercom.foodshop.persistence作为依赖项(
  • com.foodshop.persistence-(这是存储库定义的地方,spring-boot-starter-data-mongodb作为依赖项添加到该项目中(

上面提到的所有3个项目都封装在父pommaven项目中,父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注释起了作用。

相关内容

  • 没有找到相关文章

最新更新