【问题标题】:Dropwizard config overrideDropwizard 配置覆盖
【发布时间】:2016-05-24 22:30:42
【问题描述】:

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

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

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

谢谢!

【问题讨论】:

    标签: java yaml configuration-files dropwizard


    【解决方案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
    

    【讨论】:

      【解决方案2】:

      我认为这就是您要寻找的: 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

      【讨论】:

        【解决方案3】:

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

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-09-24
          • 2017-09-08
          • 2014-07-02
          • 1970-01-01
          • 1970-01-01
          • 2014-04-10
          • 2013-02-12
          相关资源
          最近更新 更多