【发布时间】:2021-01-01 14:22:15
【问题描述】:
我们正在构建独立的可重用 Spring Data jpa 模块没有 spring boot。我们称它们为数据库模块。这些模块将被导入另一个 Spring Boot 应用程序。在 db 模块中,我们包括
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-jpa</artifactId>
<scope>provided</scope>
</dependency>
但是,我们在主弹簧靴中包含了
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
db 模块中的所有 spring 依赖项都是在主 spring boot 应用程序提供的运行时提供的范围内提供的。这是正确的做法吗?
此外,每个 db 模块是否应该有自己的用于 db 连接的属性文件,或者它们是否应该回复主 spring boot 应用程序。所有 db 模块都连接到同一个数据库。这些模块代表应用程序中的不同域。
【问题讨论】:
-
提供的范围是不可传递的,依赖不会被拉入依赖于数据库模块的项目中。那是你要的吗?您希望启动器将其拉入吗?
-
这就是我们想要实现的目标。所有这些 db 模块都继承自一个父 pom,该 pom 包含所有这些具有提供范围的依赖项。消费环境(spring boot app)向这些数据库模块提供这些依赖关系不是更好吗?或者所有这些数据库模块都应该带来它们自己的依赖关系吗?这可能会导致问题,因为主 Spring Boot 应用程序也将具有 Spring 核心依赖项,并且如果它们位于不同版本上,可能会导致类路径污染。
-
简答:所有这些 db 模块都应该自带依赖项。
-
“如果它们在不同的版本上,可能会导致类路径污染” 这取决于打包应用程序以进行部署以解决此类差异的构建脚本。 Maven 通常会自动为您执行此操作。如果你不声明你依赖的其他库,你怎么知道是否存在需要解决的冲突。在代码运行失败之前您不会知道,并且在已经部署用于生产之前您可能不会检测到这一点,因此您只是使生产服务器崩溃,因为在构建过程中应该检测到一些东西。
-
@Andreas fair pont
标签: java spring spring-boot maven spring-data-jpa