18

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

任何建议在运行时摄取这种动态行为的最佳实践是什么?我可以想到以下选项来触发更改...

  • 使用上述属性更改向服务器实例发送 JMS 消息
  • 在服务器实例上调用公开的 API 端点,例如 POST http://myapp/admin/config/update { "config": { "app.cool-feature.enable": true } }

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

想法?

4

3 回答 3

8

如果您使用的是 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 类...

于 2015-09-09T18:30:27.647 回答
6

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

于 2015-09-24T05:51:05.780 回答
5

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

从他们的主页:

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

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

于 2015-02-27T07:52:10.517 回答