如何在使用弹簧引导时配置动态属性?

我打算使用Spring Boot来完成我的作业。它是连接到数据库的典型服务器应用程序。我知道我可以使用Spring Configuration来外部化我的属性,例如.db连接详细信息。但我还有其他动态属性需要在运行时更新。例如,翻转器/功能标志。我的应用程序的某些功能需要动态控制,例如,想象一个像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紧密集成,那就太好了。

思潮?


答案 1

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


答案 2

如果您使用的是弹簧靴,请查看.您将需要提供一个Bean才能访问您的财产。因此,属性的原始值可以在执行期间更改,因为它们是 Bean 的常规属性。@ConfigurationProperties

例如,在您的情况下:

@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和Spring boot,通过自动配置,你已经有了属性类......


推荐