如何在 Spring 中实现弹性 bean?

hen*_*ren 5 java spring

我有一个 Spring bean,它通过构造函数中的 http 访问外部系统。如果启动时外部系统不可用,则无法创建 bean 并且应用程序无法正常启动。

我希望我的应用程序无论外部系统如何都能够启动。我宁愿暂时缺少功能也不愿重新启动应用程序。

我知道这应该可以在 Spring 中通过正确选择范围和代理 bean 工厂来实现,但我不确定实际上是如何做到的。在我看来,Spring AOP 的大部分内容旨在修改成功创建的目标,并且在创建过程中无法处理异常,还是我错了?

简而言之:我想要一个代理,它在第一次访问时创建目标 bean,然后只要它工作就保留该实例。如果创建失败,它应该抛出异常并在下次调用代理时重试。

那么,您将如何实现此功能?

hen*_*ren 1

我最终创建了一个 ResilientBeanProxy,将实际创建推迟到以后,所以是的,它几乎与 Spring 的惰性初始化一样,但增加了在初始化期间处理异常的功能。例如,如果启动期间发生错误,它不会停止应用程序上下文的创建。

如果创建失败,将在下次调用时重试。