【问题标题】:How to configure dynamic properties while using spring boot?使用spring boot时如何配置动态属性?
【发布时间】:2015-04-29 15:07:59
【问题描述】:

我打算在我的作业中使用 Spring Boot。它是一个连接到数据库的典型服务器应用程序。我知道我可以使用Spring Configuration 将我的属性外部化,例如数据库连接详细信息。但我还有其他需要在运行时更新的 dynamic 属性。例如鳍状肢/功能标志。我的应用程序的某些功能需要动态控制,例如想象一个像 app.cool-feature.enable=true 这样的属性,然后过一段时间 app.cool-feature.enable=false

关于在运行时摄取这种动态行为的最佳做法是什么?我可以想到以下选项来触发更改...

  • 将 JMS 消息发送到具有上述属性更改的服务器实例
  • 在服务器实例上调用公开的 API 端点,例如发布http://myapp/admin/config/update { “配置”:{ “app.cool-feature.enable”:真 } }

我知道我可以编写自己的自定义代码来实现这一点(这将是第三次),但只是想知道是否已经存在围绕动态属性配置的标准方式/常见做法,而我不知道。如果它可以与 Apache ZooKeeper、coreos etcd、Netflix curator 等其他解决方案一起使用并与 Spring 紧密集成,那就太好了。

想法?

【问题讨论】:

    标签: java spring spring-boot apache-zookeeper etcd


    【解决方案1】:

    如果您使用的是 Spring Boot,请查看 @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
        }
    }
    

    然后在你的 JMS 消息监听器中注入这个 bean。

    当然,如果您使用 JMS 和 Spring boot,通过自动配置,您已经拥有 Properties 类...

    【讨论】:

      【解决方案2】:

      您的要求是“Spring Cloud Config”的一个很好的用例,您不仅可以将所有配置集中放置,还可以动态刷新它们,然后您的引用应用程序可以从下一刻开始选择这些配置.请参阅此标准弹簧link 以获取相同的信息。

      【讨论】:

        【解决方案3】:

        您可能想看看 Togglz:www.togglz.org

        从他们的主页:

        Togglz 是 Java 的 Feature Toggles 模式的实现。功能切换是持续部署和交付上下文中非常常见的敏捷开发实践。基本思想是将切换与您正在处理的每个新功能相关联。这允许您在应用程序运行时启用或禁用这些功能,即使对于个人用户也是如此。

        Togglz 不绑定 spring 框架但支持它。

        【讨论】:

          猜你喜欢
          • 2020-02-16
          • 2019-04-21
          • 2016-03-07
          • 2019-05-19
          • 1970-01-01
          • 2020-06-14
          • 2018-11-14
          • 2021-07-17
          • 1970-01-01
          相关资源
          最近更新 更多