我可以在Java应用程序中为config.yml指定默认值吗?

时间:2018-12-18 10:28:54

标签: java yaml dropwizard

我目前正在使用dropwizard处理我的Java应用程序。

它工作正常,我运行它发送yml文件完整或参数。

例如,其中之一就是这个:

reporting:
  enabled: false

所以,我要做的是将此yml文件设置为默认值,并在需要时(用于将来的功能)发送此var

的值

所以我想做这样的事情

reporting:
  enabled: ${REPORTING_FLAG:false}

然后我可以将REPORTING_FLAG作为环境参数(码头工人)发送,并且应该可以正常工作。...

问题是我的应用程序无法识别此模型。

有什么办法可以做到这一点吗?是否需要考虑其他配置?我以前用spring应用程序做到过,但这似乎有所不同。

现在我收到一个错误消息,期望的布尔值无效(将整行作为字符串)

想法?

1 个答案:

答案 0 :(得分:3)

因此,在阅读了更多dropwizard文档之后,我发现了这一点:https://www.dropwizard.io/0.8.2/docs/manual/core.html

环境变量

dropwizard配置模块还提供了使用SubstitutingSourceProvider和EnvironmentVariableSubstitutor将配置设置替换为环境变量值的功能。

public class MyApplication extends Application<MyConfiguration> {
    // [...]
    @Override
    public void initialize(Bootstrap<MyConfiguration> bootstrap) {
        // Enable variable substitution with environment variables
        bootstrap.setConfigurationSourceProvider(
                new SubstitutingSourceProvider(bootstrap.getConfigurationSourceProvider(),
                                                   new EnvironmentVariableSubstitutor()
                )
        );

    }

    // [...]
}

需要替换的配置设置必须在配置文件中明确编写,并遵循Apache Commons Lang库中StrSubstitutor的替换规则。

mySetting: ${DW_MY_SETTING}
defaultSetting: ${DW_DEFAULT_SETTING:-default value}