【发布时间】:2017-01-31 03:26:01
【问题描述】:
我有以下情况。在我的微服务 [MA] 中,我想在应用程序启动后或基于某些事件初始化/销毁一些 bean。想象一下,还有另一个微服务 [MB] 保存有关 ContentStores 的信息。 MA 启动后,我想向 MB 询问 contentStore 条目,并基于此我想根据需要创建那么多 bean。可能会有触发 storeCreated/storeDeleted 的事件,在这种情况下,我需要销毁 bean。
我目前不知道我需要实现哪些接口/类扩展,所以请给我一些建议。
让我们从ApplicationListener 和事件ApplicationReadyEvent 开始。有了这两个,我知道 MA 已初始化,我可能可以向 MB 询问商店列表。
在这个地方,我可以利用事件的 applicationContext 并创建 bean(每个 bean 都有自己的限定符 - 例如 ID),如果需要,可以自动装配它们的依赖关系。
但是从这个地方我不知道如何将创建的 bean 添加到 ApplicationContext。
应用程序事件应该存在相同的机制,但在这种情况下,我可能首先检查是否创建了 bean,如果是,则返回它们。
注意:我使用的是 spring-boot 1.4。
谢谢
【问题讨论】:
-
您是否考虑过使用子应用程序上下文?然后您可以刷新它以创建 bean 并关闭它以销毁它们。您将如何创建 bean 将取决于您的要求。您能描述一下您需要创建的 bean 吗?是否有固定的已知数量的 bean,而您只需要其他服务的一些配置,或者 bean 的数量会有所不同?
-
嗨,Andy,bean 的数量是变化的,取决于第二个服务。基本上会有 1-n 个内容存储,我需要在应用程序启动时或在远程服务中创建新的 contentStore 条目时实例化它们。那时可能会出现 contentStore 被删除的情况,所以我需要从应用程序中删除该 bean。
-
@AndyWilkinson 你能看看this吗?
标签: spring spring-boot