I couldn't find any documentation for this. For example, I know this is possible:
defaultSetting: ${DW_DEFAULT_SETTING:-default value}
But what if I want logic to say if DW_DEFAULT_SETTING is not defined, then use another env variable
defaultSetting: ${DW_DEFAULT_SETTING:-${ANOTHER_SETTING}}
Is this possible? The only other alternative I can think of is defining a custom getter for defaultSetting in my Configuration class which would read system env variables.
Technically, it should be possible.
You could use the constructor EnvironmentVariableSubstitutor​(boolean strict, boolean substitutionInVariables)
with the second argument as true
to enable substitution inside variables.
For bootsrapping your app with this special EnvironmentVariableSubstitutor​
instance, see WarFox's answer in related question Overriding server connector config with env variables with dropwizard.
The SubstitutingSourceProvider
to use environment variables inside YAML files is explained here: Can I specify default values for a config.yml on my java application?.
Responsible for environment variable substitution is the class EnvironmentVariableSubstitutor
.
It is implemented by inheritance and uses Apache Commons Text: extends StringSubstitutor
.
From StringSubstitutor
's JavaDoc:
Using Recursive Variable Replacement
Variable replacement can work recursively by calling
setEnableSubstitutionInVariables(boolean)
withtrue
. If a variable value contains a variable then that variable will also be replaced. Cyclic replacements are detected and will throw an exception.You can get the replace result to contain a variable prefix. For example:
"The variable ${${name}} must be used."
If the value of the "name" variable is "x", then only the variable "name" is replaced resulting in:
"The variable ${x} must be used."