Spring JPA 多模块项目

Posted

技术标签:

【中文标题】Spring JPA 多模块项目【英文标题】:Spring JPA multi module project 【发布时间】:2022-01-24 01:50:44 【问题描述】:

我正在尝试创建一个 Spring 多模块项目。 模块 1,处理应用程序启动和基本的 Web MVC 服务。 模块 2,适用于 MultiTentanted Jpa

模块 2,作为独立应用程序运行良好,但是当我将它作为依赖项包含在模块 1 中时,我收到以下错误,Caused by: org.springframework.data.mapping.MappingException: couldn' t 查找类型类 uk.rteksoft.tenantservices.tenant.model.Role 的 PersistentEntity! 我假设我在某处的配置 bean 中遗漏了一些东西,但无法找出我需要做些什么来完成这项工作。 我有一个包含模块 1 和模块 2 的父 pom。 请说我是否需要发布任何配置或其他文件。 谢谢 约翰

【问题讨论】:

【参考方案1】:

你需要从注入的模块中扫描基础包,否则spring不会为注入的模块创建任何bean,你将面临依赖错误。

在主应用的 SpringBootApplication 注解中使用 scanBasePackages 值(您可以根据需要扫描包数组)

例如:

@SpringBootApplication(scanBasePackages = "com.example.multimodule")

这是基于多个示例应用程序的示例link

ComponentScan 是另一种扫描多模块包的方法;

@ComponentScan(value = "com.example.multimodule")

还可以使用以下注释来扫描您的实体和存储库

@EntityScan("你的实体基础包")

@EnableJpaRepositories("你的仓库基础包")

【讨论】:

我已经尝试过@ComponentScan 并将scanBasePackages 添加到SpringBootApplication 注释以及所有相关的包名称,但仍然有相同的错误。 @JReynolds 使用 @EntityScan("你的实体包") @EnableJpaRepositories("你的存储库基础包") 我已经尝试了这两个注释,存储库和 EntityManagerFactories 正在正确初始化,为持久性单元“tenantdb-persistence-unit”初始化了 JPA EntityManagerFactory,它在模块中2

以上是关于Spring JPA 多模块项目的主要内容,如果未能解决你的问题,请参考以下文章

Spring boot application.properties maven 多模块项目

SpringBoot多模块项目(Multi-Modules)

Spring Boot 多模块项目创建与配置 (转)

spring boot 多模块在tomcat上运行

Spring-Boot构建多模块项目

使用 Spring 在多模块 Maven 项目中进行集成测试