Configuration for Java Microprofile
For many project artifacts (e.g. WAR, EAR) it should be possible to build them only once and then install them at different customers, stages, etc. They need to target those different execution environments without the necessity of any repackaging. In other words: depending on the situation they need different configuration.
This is easily achievable by having a set of default configuration values inside the project artifact. But be able to overwrite those default values from external.
How it works
A 'Configuration' consists of the information collected from the registered
ConfigSources get sorted according to their ordinal.
That way it is possible to overwrite configuration with lower importance from outside.
By default there are 3 ConfigSources:
META-INF/microprofile-config.propertiesfiles on the ClassPath. (ordinal=100, separately configurable via a config_ordinal property inside each file)
That means that one can put the default configuration in a
META-INF/microprofile-config.properties anywhere on the classpath.
and the Operations team can later simply e.g set a system property to change this default configuration.
It is of course also possible to register own
ConfigSource could e.g. read configuration values from a database table, a remote server, etc
Accessing and Using the Configuration
Config config = ConfigProvider.getConfig(); String restUrl = config.getValue("myproject.some.endpoint.url", String.class);
Of course we also support injection via a JSR-330 DI container:
@Inject @ConfigProperty(name="myproject.some.endpoint.url"); private String restUrl;