Zookeeper 如何在使用 Spring Boot 时配置动态属性?

wz3gfoph  于 2022-12-09  发布在  Apache
关注(0)|答案(3)|浏览(108)

我计划使用Sping Boot 来完成我的任务。它是一个典型的服务器应用程序,连接到数据库。我知道我可以使用Spring Configuration来具体化我的属性,例如db连接细节。但是我还有其他需要在运行时更新的动态属性。例如flippers/feature flag。我的应用程序的某些特性需要动态控制,例如,想象一下像这样的属性app.cool-feature.enable=true,过一段时间后,同一功能将被关闭app.cool-feature.enable=false
关于在运行时摄取这种动态行为的最佳实践是什么,有什么建议吗?我可以想到以下选项来触发更改...

  • 将具有上述属性更改的JMS消息发送到服务器示例
  • 调用服务器示例上公开的API端点,例如POST http://myapp/admin/config/update {“config”:{“应用程序.酷功能.启用”:false} }

我知道我可以编写自己的自定义代码来实现这一点(这将是第三次),但我只是想知道是否已经有标准的方式/通用实践围绕动态属性配置,我不知道。此外,如果它可以与其他解决方案,如Apache ZooKeeper,coreos etcd,Netflix馆长等,并与Spring紧密集成,这将是伟大的。
有什么想法?

anauzrmj

anauzrmj1#

您的需求是“Spring Cloud Config”的一个很好的用例,在该用例中,您不仅可以将所有配置集中放置,而且还可以动态刷新它们,然后您的引用应用可以从下一个时刻开始选择这些配置。请参考此标准Spring link以了解相同内容。

kyxcudwk

kyxcudwk2#

如果您使用Spring启动,请查看@ConfigurationProperties。您将需要提供一个Bean来访问您的属性。因此,属性的原始值可以在执行过程中更改,因为它们是Bean的常规属性。
以您的情况为例:

@Component
@ConfigurationProperties
public class JmsProperties {

    private String url = "vm://localhost"; // (let's suppose you use ActiveMQ)
    
    public String getUrl() {
      // Do work here
    }
    public void setUrl(String value) {
      // Do work here
    }
}

然后将此bean注入JMS消息侦听器。
当然,如果您使用JMS和Sping Boot ,那么通过自动配置,您已经拥有了Properties类...

u0sqgete

u0sqgete3#

您可能想看看Togglz:www.togglz.org
从他们的主页:
Togglz是Java的Feature Toggles模式的实现。Feature Toggles是持续部署和交付上下文中非常常见的敏捷开发实践。基本思想是将切换与您正在使用的每个新特性相关联。这允许您在应用程序运行时启用或禁用这些特性,甚至对单个用户也是如此。
Togglz没有绑定到Spring框架,但支持它。

相关问题