Seit den vergangenen Posts zum Thema MicroProfile ist einiges passiert. MicroProfile 4 ist releast (Aktuelle Version 4.1 vom Juli 2021). Das umfasst auch MP Config 2.0 mit einigen Änderungen zu damals beschriebenen Version 1.4.
Die Grundlagen aus Welche Einstellung haben Sie? Anwendungskonfiguration mit MicroProfile Config sind natürlich immer noch gültig. Zwei neue Features möchte ich im Folgenden kurz beschreiben.
Configuration Profiles
In verschiedenen Stages haben Anwendungen i. A. unterschiedliche Einstellungen. MP Config bietet dazu Configuration Profiles an, von denen eines mit der Property mp.config.profile aktiviert werden kann. Die davon betroffenen Config Properties können entweder mit einem Präfix benannt werden (z. B. %dev.database) oder in separaten Properties-Dateien eingetragen werden (z. B. META-INF/microprofile-config-test.properties).
Nehmen wir an, wir hätten diese beiden Konfigurationsdateien:
# META-INF/microprofile-config.properties
database: postgres
%dev.database: h2# META-INF/microprofile-config-test.properties
database: derbyDazu denken wir uns noch eine Variable, die per Injektion den Konfigurationswert namens database zugewiesen bekommt:
@Inject
@ConfigProperty(name = "database")
String database;Normalerweise wäre der Wert nun postgres, im Profil dev jedoch h2 und im Profil test derby. Das Profil kann bspw. beim Start der Anwendung durch Angabe der System Property mp.config.profile ausgewählt werden:
java -Dmp.config.profile=test -jar …Property Expressions
In den Konfigurationdateien META-INF/microprofile-config[-profile].properties
dürfen nun Properties im Wert einer anderen Property verwendet werden, und zwar mehrfach, eingeschachtelt oder auch mit Default-Wert. Auch dazu ein kleines Beispiel:
META-INF/microprofile-config.properties
server.url=http://${server.host:example.org}:${server.port}/${server.endpoint}
server.port=8080
server.endpoint=${server.endpoint.path.${server.endpoint.name:foo}}
server.endpoint.path.foo=api/foo
server.endpoint.path.bar=api/barUnter der Annahme, dass keine der aufgeführten Properties durch andere Config Sources mit Werten belegt wird, hätte die Property server.url den Wert http://example.org:8080/api/foo.
Weitere Informationen
Wir versorgen Sie gerne mit weiterem Input:
- Unser Expertenkreis Java ist eine regelmäßige Vortragsveranstaltung zu allem aus dem Java-Ökosystem. Melden Sie sich kostenfrei an unter https://gedoplan.de/java-events/.
- In die Tiefe gehen wir in unseren Seminaren (s. https://gedoplan.de), z. B.
- Zweimal im Jahr finden Sie in unserem Firmenmagazin GEDOPLAN aktuell Fachartikel zu den Themen, die uns bewegen. Fordern Sie die Print-Ausgabe an oder lesen Sie online unter https://gedoplan.de/publikationen/.
Dirk Weil, GEDOPLAN GmbH





