如何在使用spring boot时配置动态属性?

时间:2015-02-27 01:28:29

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

我打算将Spring Boot用于我的任务。它是一个连接数据库的典型服务器应用程序。我知道我可以使用Spring Configuration来外部化我的属性,例如数据库连接细节。但我还有其他动态属性需要在运行时更新。例如脚蹼/功能标志。我的应用程序的某些功能需要动态控制,例如设想像 app.cool-feature.enable = true 这样的属性,然后一段时间后, app.cool-feature.enable = false <关闭相同的功能/ p>

有关建议在运行时采集此类动态行为的最佳做法是什么?我可以考虑以下选项来触发变更...

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

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

思想?

3 个答案:

答案 0 :(得分:7)

如果您使用的是Spring引导,请查看@ConfigurationProperties。您将需要提供Bean才能访问您的房产。 因此,属性的原始值可以在执行期间更改,因为它们是bean的常规属性。

例如:

@Component
@ConfigurationProperties
public class JmsProperties {

    private String url = "vm://localhost" (let's suppose you use ActiveMQ);

    public String getUrl()...
    public void setUrl(String value)...

}

然后在您的JMS消息侦听器中注入此bean。

当然,如果你使用JMS和Spring启动,使用自动配置你已经有了属性类......

答案 1 :(得分:3)

您可能需要查看Togglz:www.togglz.org

从他们的主页:

  

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

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

答案 2 :(得分:3)

您的要求是一个很好的用例,用于&#34; Spring Cloud Config&#34;您不仅可以将所有配置放在中心位置,还可以动态刷新它们,然后您可以在下一刻从引用应用程序中选择它们。请参考此标准弹簧link