web-dev-qa-db-ja.com

DropWizardに複数の構成ファイルを含めることはできますか?

DropWizard用にいくつかのyamlファイルが欲しいです。それらの1つには機密情報が含まれ、もう1つには機密情報が含まれていません。

DropWizardで複数の構成を行う方法のドキュメントや例を教えていただけますか?

14
Victor Ronin

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);
    }
}
8
Natan

まず、.ymlに別のymlファイルパスを書き込みます。

sample.yml

configPath: /another.yml

another.yml

greet: Hello!

そして、SnakeYamlを使用するだけで解決されます。

public void run(SampleConfiguration configuration, Environment environment) {
    Yaml yaml = new Yaml();
    InputStream in = getClass().getResourceAsStream(configuration.getConfigPath());
    AnotherConfig anotherConfig = yaml.loadAs(in, AnotherConfig.class);
    String str = anotherConfig.getGreet(); // Hello!
...
}

機密情報については、環境変数を使用するのが良いと思います。

たとえば、dropwizard-environment-configを使用します
https://github.com/tkrille/dropwizard-environment-config

5
ko2ic

理想的には、複数のファイルを管理するのではなく、機密情報または構成可能なデータを環境変数内に配置してアプリを構成する必要があります。構成に関する12要素ルールを参照してください: 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コンテナーと互換性があり、環境変数はアプリの実行時にのみ使用できます。

5
yunspace