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