【问题标题】:Spring Boot - Conditionally load module during runtime or compile-timeSpring Boot - 在运行时或编译时有条件地加载模块
【发布时间】:2020-09-16 05:54:30
【问题描述】:

首先,我是 Spring Boot 的新手,所以我不确定在框架内是否有可能发生这样的事情。

让我描述一下我的问题。

我有 10 个代码库。每个存储库都侦听数据流,解析数据并更新数据库。由于可维护性问题,我计划将其置于单个代码存储库中。这个新应用程序将被通用化,并且某些特定于应用程序的配置(例如,我应该连接到哪个流,数据库主机)将在运行时检索。

理论上,这将允许我维护一个代码库,但可以根据我需要的配置将其部署为 10 个独立的服务。但是,有一组特定于应用程序的 java 类用于解析检索到的数据。为了更好地理解这一点,请参考下图。

理想情况下,我仍然需要在同一个存储库中维护这些类,但作为单独的模块。加载配置后,应用程序应该能够将相应的模块加载到应用程序上下文中并初始化 Java 类。不会使用其他模块。

我可以用 Spring Boot 做这样的事情吗?或者,如果我可以创建单独的构建,然后可以单独部署,那么即使是构建时间解决方案也可以。

【问题讨论】:

  • 从我的理解你的解释,会有不同的配置设置,也有根据配置设置加载单独模块的情况。它应该能够用弹簧靴完成。 “runtime config load”是指第一次/启动时加载配置,更改时不加载配置。
  • 是的,正确。当应用程序初始化时,将加载相应的配置。基于此,有条件的模块将被添加到应用程序上下文中
  • 那么应该没问题。只需根据配置创建不同的配置和加载器内部的条件
  • 我猜可以使用 if 条件,但我想知道是否有“Spring”方法来处理这个问题。
  • 也许你可以试试thisthis

标签: java spring spring-boot


【解决方案1】:

不确定我是否理解得很好,但为什么不试试 spring profile (https://www.baeldung.com/spring-profiles)。您可以为每个服务设置不同的配置,并在运行时使用 spring.profiles.active 说明将使用什么配置。

类似的东西也可能有用https://www.baeldung.com/spring-reloading-properties

【讨论】:

  • 您好,谢谢您的回答。我在表面上略读了一遍,稍后将深入了解它。但它看起来像是基于环境变量之类的加载属性或配置,对吧?我的要求是根据注入的属性加载模块。按模块,它只是一堆我想要初始化的java类
  • 是的,您可以使用环境变量或在运行时传递参数,这取决于您如何进行部署。但是,如果您有模块,则应该结合 spring 配置文件为每个模块执行自定义 maven/gradle 构建脚本。使用自定义构建脚本,您可以定义您使用的包/类。
  • 你有什么文档可以参考实现类似的东西吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-06
  • 2017-09-23
相关资源
最近更新 更多