我可以在 DropWizard 中拥有多个配置文件吗?

2022-09-02 21:44:24

我想为DropWizard提供几个yaml文件。其中一个包含敏感信息,另一个包含非敏感信息。

你能给我指出任何文档或示例如何在DropWizard中拥有多个配置吗?


答案 1

ConfigurationSourceProvider是你的答案。

bootstrap.setConfigurationSourceProvider(new MyMultipleConfigurationSourceProvider());

以下是dropwizard在默认情况下如何做到这一点。您可以根据自己的喜好轻松更改它。

public class FileConfigurationSourceProvider implements ConfigurationSourceProvider {
    @Override
    public InputStream open(String path) throws IOException {
        final File file = new File(path);
        if (!file.exists()) {
            throw new FileNotFoundException("File " + file + " not found");
        }

        return new FileInputStream(file);
    }
}

答案 2

理想情况下,您应该通过将敏感信息或可配置数据放在环境变量中来配置应用程序,而不是管理多个文件。请参阅有关配置的十二因素规则:http://12factor.net/config

要在 Dropwizard 中启用此方法,您可以在运行时使用环境变量覆盖配置,方法是使用标志:-Ddw

java -Ddw.http.port=$PORT -jar yourapp.jar server yourconfig.yml

或者你可以使用这个方便的附加:https://github.com/tkrille/dropwizard-template-config 将环境变量占位符放在你的配置中:

server:
  type: simple
  connector:
    type: http
    # replacing environment variables
    port: ${env.PORT}

上述两种解决方案都与 Heroku 和 Docker 容器兼容,其中环境变量仅在运行应用时可用。


推荐