我正在使用Dropwizard开发RESTful服务。现在我需要将它部署到不同的环境(测试,升级,产品)和数据中心(cn,us等)。因此,它需要针对不同的环境/数据中心进行不同的配置。
好奇这通常如何处理?我可能为每个env / dc配置一个配置,但在这种情况下,它们会有很多重复的公共配置。
我期待我有一个基本配置,比如base.yaml,包含常见的配置;然后每个环境和DC都有一个配置,它使用自定义配置扩展/覆盖基本yaml。这可能在Dropwizard中吗?
谢谢!
答案 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列表。您可以设置要加载的默认名称。