Dropwizard配置覆盖

时间:2016-05-24 22:30:42

标签: java yaml configuration-files dropwizard

我正在使用Dropwizard开发RESTful服务。现在我需要将它部署到不同的环境(测试,升级,产品)和数据中心(cn,us等)。因此,它需要针对不同的环境/数据中心进行不同的配置。

好奇这通常如何处理?我可能为每个env / dc配置一个配置,但在这种情况下,它们会有很多重复的公共配置。

我期待我有一个基本配置,比如base.yaml,包含常见的配置;然后每个环境和DC都有一个配置,它使用自定义配置扩展/覆盖基本yaml。这可能在Dropwizard中吗?

谢谢!

3 个答案:

答案 0 :(得分:1)

我不认为DropWizard具有该功能,但您总是可以编写一个包含几个YAML文件的小脚本,并使用结果启动DropWizard。您可以使用简单的模板引擎,例如Mustache

config-template.yml

# ...
server:
  applicationConnectors:
    - type: http
      port: {{PORT}}

config-parms-us.yml

---
PORT: "8080"
---

然后使用:

mustache config-parms-us.yml config-template.yml > config.yml
java ... server config.yml

答案 1 :(得分:1)

我认为这就是你要找的东西: https://github.com/constretto/constretto-dropwizard

它允许您具有以下特定于环境的配置:

database:   # the JDBC URL   
    url: jdbc:oracle:thin:@//oracle-testing:1521/name   
    .staging.url: jdbc:oracle:thin:@//oracle-staging:1521/name   
    .production.url: jdbc:oracle:thin:@//oracle-production:1521/name

如果您想在某些环境使用情况下启动应用程序:

-DCONSTRETTO_TAGS=$ENVIRONMENT

答案 2 :(得分:0)

您可以创建自己的配置包,实现Bundle以添加您自己的配置设置。

因此,您还需要创建自己的ConfigurationSourceProvider,然后覆盖open(String path)方法,这样您就可以找到您的配置基名。

最后,您可以实现EnvironmentAware,它可以帮助您解决所有配置文件,这是一个url列表。您可以设置要加载的默认名称。