【问题标题】: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
关于在运行时摄取这种动态行为的最佳做法是什么?我可以想到以下选项来触发更改...
我知道我可以编写自己的自定义代码来实现这一点(这将是第三次),但只是想知道是否已经存在围绕动态属性配置的标准方式/常见做法,而我不知道。如果它可以与 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 框架但支持它。