Der Betrieb von Microservices hat allein schon wegen der Masse an verschiedenen Diensten seine eigenen Tücken. Eine zentralisierte Konfiguration mit dem Spring Config Server nimmt einem viel Arbeit ab.
Erforderliche Abhängigkeiten zum Erstellen des Config-Servers.
(Bild: Dr. Koller / Spring.io)
In Spring Boot-Anwendungen wird die Konfiguration getrennt vom Code in den Dateien application.properties oder application.yml aufbewahrt; im Normalfall werden sie dann aber trotzdem zusammen in einer Jar-Datei paketiert. Im Microservices-Umfeld kann das schnell zum Problem ausarten.
Oft hat man es mit sehr vielen Services zu tun. Jeder Service liegt womöglich in mehreren Instanzen und für verschiedene Umgebungen vor. Bei Änderungen an der Konfiguration müssten alle Instanzen neu deployt werden. Eine Lösung für dieses Problem ist die Verwaltung der Konfigurationen mit einem separaten Server.
Wir vertrauen dabei in unserem Beispiel auf den Spring Config Server. Dieser bezieht die Key/Value-Paare aus einem Git-Repository oder einer Datenbank und stellt sie die den vorhandenen Diensten über HTTP zur Verfügung – im besten Fall ohne Neustart der Services bei Änderung eines Wertes.
Anlegen des Repositories
In diesem Beitrag kommen die Daten aus Gründen der einfachen Nachvollziehbarkeit aus einem lokalen Git-Repository, das die Properties-Files enthält. Eine Umstellung auf ein Remote-Repo ist aber kein Problem. Das Repository wird angelegt, indem ein neuer Ordner erstellt und darin git init aufgerufen wird:
mkdir config-repo cd config-repo git init
Anschließend wird in dem neuen Ordner eine Properties-Datei erstellt und mit einem Key-Value-Paar zum Testen versehen. Der Name der Properties-Datei entspricht dabei dem Namen des Client-Services. Hier werden Properties für einen Client namens config-server-client angelegt, die Datei heißt deshalb config-server-client.properties. Darin enthalten ist eine einfache Property namens message:
message=Hello from config server
Die Datei wird dem Git-Repository zugefügt und committet:
git add . git commit -m "inital config"
Erstellen des Config-Servers
Erforderliche Abhängigkeiten zum Erstellen des Config-Servers.
(Bild: Dr. Koller / Spring.io)
Der Server selbst wird erstellt, indem einem neuen Spring-Boot-Projekt zum Beispiel in STS oder mithilfe des Initializr neben Spring Web die Dependency „Config Server“ zugefügt wird. Die Klasse mit der main-Methode erhält die Annotation _@EnableConfigServer_:
@EnableConfigServer @SpringBootApplication public class ConfigServerApplication { public static void main(String[] args) { SpringApplication.run(ConfigServerApplication.class, args); } }
Schließlich ist noch die Konfigurationsdatei application.properties des neu erstellten Server-Projekts anzupassen. Hier wird der Port auf den für Config-Server üblichen Wert 8888 eingestellt, der Name für die Anwendung vergeben und der Pfad zum Git-Repository beschrieben. Wer macOS oder Linux nutzt, braucht bei der Angabe des Pfades nach file: lediglich zwei Slashes:
Der Server kann danach gestartet werden. Die URL, unter der die Properties erreichbar sind, ergibt sich aus Host, Port, Name der Properties-Datei und Umgebung. Ein Aufruf http://localhost:8888/config-server-client/default im Browser führt zu folgender JSON-Antwort:
Erscheint die Ausgabe, dann ist der Config-Server funktionsbereit.
Anlegen des Config-Server-Client
Die Daten werden im Normalfall nicht vom Browser abgerufen, sondern von einem Service, der als Client des Config-Servers fungiert. Auch er wird als Spring Boot-Anwendung zum Beispiel mit dem Initializr angelegt. Erforderlich sind die Abhängigkeiten Spring Web und Config Client.
Der Service erhält in application.properties einen Namen und bei Bedarf einen vom Default-Wert abweichenden Port. Ein vorhandener Config-Server wird seit Spring Boot 2.4 mithilfe der Property spring.config.import angegeben. Das sieht beispielsweise so aus:
Diese Anpassungen genügen im einfachsten Fall bereits, der Service bezieht eine (hier optionale) Konfiguration vom Config-Server auf localhost und Default-Port 8888. Um das auszuprobieren, wird hier eine Methode angelegt, die die Property message als String zurückgibt:
@SpringBootApplication @RestController public class ConfigServerClientApplication {
@Value("${message}") private String message;
public static void main(String[] args) { SpringApplication.run(ConfigServerClientApplication.class, args); }
@GetMapping("/") public String getMessage() { return message; }
Ein Aufruf des Dienstes im Browser unter http://localhost:8080 bringt die vom Config-Server ausgelieferte Property aus dem Repository zur Anzeige. Im Normalfall wird man Host und Port des Config-Server konfigurieren wollen:
Lässt man „optional:“ weg, ist eine Verbindung zum Config-Server auf jeden Fall erforderlich.
Stand: 08.12.2025
Es ist für uns eine Selbstverständlichkeit, dass wir verantwortungsvoll mit Ihren personenbezogenen Daten umgehen. Sofern wir personenbezogene Daten von Ihnen erheben, verarbeiten wir diese unter Beachtung der geltenden Datenschutzvorschriften. Detaillierte Informationen finden Sie in unserer Datenschutzerklärung.
Einwilligung in die Verwendung von Daten zu Werbezwecken
Ich bin damit einverstanden, dass die Vogel IT-Medien GmbH, Max-Josef-Metzger-Straße 21, 86157 Augsburg, einschließlich aller mit ihr im Sinne der §§ 15 ff. AktG verbundenen Unternehmen (im weiteren: Vogel Communications Group) meine E-Mail-Adresse für die Zusendung von Newslettern und Werbung nutzt. Auflistungen der jeweils zugehörigen Unternehmen können hier abgerufen werden.
Der Newsletterinhalt erstreckt sich dabei auf Produkte und Dienstleistungen aller zuvor genannten Unternehmen, darunter beispielsweise Fachzeitschriften und Fachbücher, Veranstaltungen und Messen sowie veranstaltungsbezogene Produkte und Dienstleistungen, Print- und Digital-Mediaangebote und Services wie weitere (redaktionelle) Newsletter, Gewinnspiele, Lead-Kampagnen, Marktforschung im Online- und Offline-Bereich, fachspezifische Webportale und E-Learning-Angebote. Wenn auch meine persönliche Telefonnummer erhoben wurde, darf diese für die Unterbreitung von Angeboten der vorgenannten Produkte und Dienstleistungen der vorgenannten Unternehmen und Marktforschung genutzt werden.
Meine Einwilligung umfasst zudem die Verarbeitung meiner E-Mail-Adresse und Telefonnummer für den Datenabgleich zu Marketingzwecken mit ausgewählten Werbepartnern wie z.B. LinkedIN, Google und Meta. Hierfür darf die Vogel Communications Group die genannten Daten gehasht an Werbepartner übermitteln, die diese Daten dann nutzen, um feststellen zu können, ob ich ebenfalls Mitglied auf den besagten Werbepartnerportalen bin. Die Vogel Communications Group nutzt diese Funktion zu Zwecken des Retargeting (Upselling, Crossselling und Kundenbindung), der Generierung von sog. Lookalike Audiences zur Neukundengewinnung und als Ausschlussgrundlage für laufende Werbekampagnen. Weitere Informationen kann ich dem Abschnitt „Datenabgleich zu Marketingzwecken“ in der Datenschutzerklärung entnehmen.
Falls ich im Internet auf Portalen der Vogel Communications Group einschließlich deren mit ihr im Sinne der §§ 15 ff. AktG verbundenen Unternehmen geschützte Inhalte abrufe, muss ich mich mit weiteren Daten für den Zugang zu diesen Inhalten registrieren. Im Gegenzug für diesen gebührenlosen Zugang zu redaktionellen Inhalten dürfen meine Daten im Sinne dieser Einwilligung für die hier genannten Zwecke verwendet werden. Dies gilt nicht für den Datenabgleich zu Marketingzwecken.
Recht auf Widerruf
Mir ist bewusst, dass ich diese Einwilligung jederzeit für die Zukunft widerrufen kann. Durch meinen Widerruf wird die Rechtmäßigkeit der aufgrund meiner Einwilligung bis zum Widerruf erfolgten Verarbeitung nicht berührt. Um meinen Widerruf zu erklären, kann ich als eine Möglichkeit das unter https://contact.vogel.de abrufbare Kontaktformular nutzen. Sofern ich einzelne von mir abonnierte Newsletter nicht mehr erhalten möchte, kann ich darüber hinaus auch den am Ende eines Newsletters eingebundenen Abmeldelink anklicken. Weitere Informationen zu meinem Widerrufsrecht und dessen Ausübung sowie zu den Folgen meines Widerrufs finde ich in der Datenschutzerklärung.
Änderungen zur Laufzeit
Ändert man nun den Wert in der Properties-Datei im Repo, kann man mit http://localhost:8888/config-server-client/default überprüfen, dass der Config-Server die Änderung auswertet. Der Client dagegen bekommt die Änderung erst nach einem Neustart mit.
Das ist nicht ganz optimal, lässt sich aber beheben. Dazu wird im Client-Projekt zunächst das Actuator-Framework mit Hilfe der Dependency „Spring Boot Actuator“ zugefügt und in application.properties der Endpunkt refresh verfügbar gemacht:
management.endpoints.web.exposure.include=refresh
Außerdem wird die Klasse mit der zu aktualisierenden Variable mit @RefreshScope annotiert:
@SpringBootApplication @RestController @RefreshScope public class ConfigServerClientApplication { ... }
Beim Neustart des Service sollte im Log der Eintrag “Exposing 1 endpoint(s) beneath base path ‘/actuator’” auftauchen. Nun kann man mit Hilfe eines POST-Requests den Actuator-Endpunkt refresh aufrufen. Das geht zum Beispiel mit Postman oder wie hier gezeigt mit curl:
Der Client sieht dann ohne Neustart eine zur Laufzeit geänderte Property. Der Beitrag hat nur die grundlegende Funktion des Config-Servers demonstriert, es gibt eine Menge mehr zu entdecken. Weitere Informationen finden sich in der Spring-Dokumentation zum Spring Cloud Config Server.