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

eto*_*tle 17 java spring spring-boot etcd apache-zookeeper

我打算将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策展人等其他解决方案一起使用并且与Spring紧密集成,那将会很棒.

思考?

小智 8

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

}
Run Code Online (Sandbox Code Playgroud)

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

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


Rig*_*ggs 6

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

从他们的主页:

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

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


Avi*_*vis 5

您的需求是“ Spring Cloud Config”的一个很好的用例,在该用例中,您不仅可以集中所有配置,还可以动态刷新它们,然后可以由参考应用程序从下一刻开始选择它们。有关详情,请参阅此标准弹簧连杆