I wanted to see how hard it would be to get Dropwizard config from Consul’s key value store. Turns out it is very easy to do!
Make sure you’re using Dropwizard >= 0.8.0, this has the SubstitutingSourceProvider
that we’re going to use.
Create a default Dropwizard project with the following configuration line in its config.yml
:
someSetting: ${settings/someSetting}
Don’t forget to add it to the xxxConfiguration
:
@JsonProperty
@NotEmpty
private String someSetting;
Now in the xxxApplication class, register a new ConsulKVSubstitutor
in the initialize
method:
@Override
public void initialize(Bootstrap<ConsulConfigExampleConfiguration> bootstrap) {
bootstrap.setConfigurationSourceProvider(
new SubstitutingSourceProvider(
bootstrap.getConfigurationSourceProvider(),
new ConsulKVSubstitutor(false)
)
);
}
The setting with path settings/someSetting
while be looked up in the KV store and will be replaced in the config.yml
, after which the app will resume startup.
Lookup is done using Ecwid’s Consul API Java bindings.
Note that this does not register changes made to the settings in the KV store. This could be added by using a watch but it doesn’t look like that is currently supported in this Java lib.