Dropwizard 配置覆盖

Dropwizard config override

我正在使用 Dropwizard 开发 RESTful 服务。现在我需要将它部署到不同的环境(测试、暂存、生产)和数据中心(中国、美国等)。因此,它需要针对不同的 environment/data-center.

进行不同的配置

想知道这通常是如何处理的?我可能每个 env/dc 都有一个配置,但在那种情况下,它们将有很多重复的通用配置。

我原以为我有一个基本配置,比如 base.yaml,其中包含常用配置;然后每个环境和 DC 将有一个配置,extend/override 带有自定义配置的基本 yaml。这在 Dropwizard 中可行吗?

谢谢!

我认为 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

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

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

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

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