gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 16:58:47 24 4
gpt4 key购买 nike

我正在尝试构建一个“主”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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com