java - SpringApplicationBuilder用于组合小型SpringBoot应用程序(模块化Monolith)

标签 java spring spring-boot module dependencies

我正在尝试构建一个“主”SpringBoot 应用程序,该应用程序由许多小型独立的 SpringBoot 应用程序组成。主应用程序与每个小型 SpringBoot 应用程序通信以查询数据或修改数据。每个小应用程序都满足特定的领域。例如,用于用户管理、邮件传输、产品管理、订单履行的依赖项/SpringBoot 应用程序。每个小型应用程序都使用自己的数据库,该数据库与其他应用程序分开。

我已将小型应用程序添加为主应用程序的依赖项。我现在面临的问题是 main 实例化依赖应用程序中的所有 bean。我知道,SpringBoot就是这样工作的。问题是每个依赖项中都有一些具有相同名称的组件或类。因此,运行应用程序只会崩溃,因为存在同名的 bean,这是正确的。此外,主要尝试实例化 Hikari DB 连接,但不应有任何数据库连接。我认为这是因为其他应用程序有数据库连接。因此,main 也会尝试建立数据库连接。

这背后的想法是构建一个模块化整体,以便将来一个或多个依赖项可以被微服务取代。目前,构建微服务架构并不是必需的,也没有被主张。因此,我想构建一个模块化的整体架构。

有没有一种方法可以让每个 Spring Boot 应用程序只使用自己的 Bean,而主应用程序可以只调用其他应用程序的某个接口(interface)/API?就像其他服务公开 REST API 但不公开 REST API 一样。

使用子/ sibling 的 SpringBootApplicationBuilder ( https://docs.spring.io/spring-boot/docs/current/api/org/springframework/boot/builder/SpringApplicationBuilder.html ) 会是实现我的目标的一种方式吗?还是我错过了什么而无法实现我的目标?

最佳答案

对于 Spring Boot 的子级 - 资源和绑定(bind)中可能存在潜在冲突:无论如何,您都无法将 2 个 servlet 容器实例绑定(bind)到同一端口,因此需要将它们分开。

认为最好使用单个 Spring Boot 应用程序,并使用每个子“应用程序”带有 @Configuration 注释的专用类作为起点:

@Configuration
public class SomeModuleConfig {

@Bean
public Bean myModuleBean() {}

}

为了避免全局扫描,您可以使用@ComponentScan包含/排除过滤器: https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/context/annotation/ComponentScan.html

关于java - SpringApplicationBuilder用于组合小型SpringBoot应用程序(模块化Monolith),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61545922/

相关文章:

java - 为什么 PetClinic 示例中 Vets 类的 VetList 方法使用 XMLElement?

Spring 应用程序不在 Postgres 数据库上创建表

java - 测试 Spring Boot REST API

Spring crud 存储库按不区分大小写的字符串排序

java - Hadoop:TaskTracker 和 JobTracker 不以 start-dfs.sh 开头

java - png 图像的内容类型为 null

java - 如何在 Selenium 中仅跳过一种方法

java - 正则表达式查找方法

java - 在一个 jar 中使用 Spring boot 2.x 构建 Angular 11

java - 蒙戈 : $type is not working in mongo find query