【问题标题】: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列表。并且你可以设置你想要加载的默认名称。