DropWizard用にいくつかのyamlファイルが欲しいです。それらの1つには機密情報が含まれ、もう1つには機密情報が含まれていません。
DropWizardで複数の構成を行う方法のドキュメントや例を教えていただけますか?
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);
}
}
まず、.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
理想的には、複数のファイルを管理するのではなく、機密情報または構成可能なデータを環境変数内に配置してアプリを構成する必要があります。構成に関する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コンテナーと互換性があり、環境変数はアプリの実行時にのみ使用できます。