
Zentraler Konfigurationsserver für verteilte Systeme mit HTTP-API, Ver-/Entschlüsselung von Eigenschaften und Unterstützung für Git-, Vault-, JDBC- und lokale Dateisystem-Backends.
//// DIESE DATEI NICHT BEARBEITEN. SIE WURDE GENERIERT. Manuelle Änderungen an dieser Datei gehen verloren, wenn sie erneut generiert wird. Bearbeiten Sie stattdessen die Dateien im Verzeichnis src/main/asciidoc/. ////
image::https://circleci.com/gh/spring-cloud/spring-cloud-config/tree/master.svg?style=svg["CircleCI", link="https://circleci.com/gh/spring-cloud/spring-cloud-config/tree/master"] image::https://codecov.io/gh/spring-cloud/spring-cloud-config/branch/master/graph/badge.svg["Codecov", link="https://codecov.io/gh/spring-cloud/spring-cloud-config/branch/master"] image::https://api.codacy.com/project/badge/Grade/f064024a072c477e97dca6ed5a70fccd?branch=master["Codacy code quality", link="https://www.codacy.com/app/Spring-Cloud/spring-cloud-config?branch=master&utm_source=github.com&utm_medium=referral&utm_content=spring-cloud/spring-cloud-config&utm_campaign=Badge_Grade"]
Spring Cloud Config bietet serverseitige und clientseitige Unterstützung für externalisierte Konfiguration in einem verteilten System. Mit dem Config Server haben Sie einen zentralen Ort, um externe Eigenschaften für Anwendungen über alle Umgebungen hinweg zu verwalten.
Die Konzepte auf Client- und Serverseite bilden sich identisch auf die Spring-Environment- und PropertySource-Abstraktionen ab, passen also sehr gut zu Spring-Anwendungen, können aber mit jeder Anwendung verwendet werden, die in einer beliebigen Sprache läuft.
Wenn eine Anwendung die Deployment-Pipeline von der Entwicklung über den Test bis zur Produktion durchläuft, können Sie die Konfiguration zwischen diesen Umgebungen verwalten und sicher sein, dass die Anwendungen alles haben, was sie zum Ausführen benötigen, wenn sie migrieren.
Die Standardimplementierung des serverseitigen Speicher-Backends verwendet Git und unterstützt daher problemlos gelabelte Versionen von Konfigurationsumgebungen und ist zudem für eine breite Palette von Werkzeugen zur Verwaltung des Inhalts zugänglich.
Alternative Implementierungen lassen sich einfach hinzufügen und über die Spring-Konfiguration einbinden.
== Funktionen
=== Spring Cloud Config Server
Spring Cloud Config Server bietet die folgenden Vorteile:
@EnableConfigServer=== Spring Cloud Config Client
Speziell für Spring-Anwendungen ermöglicht der Spring Cloud Config Client Folgendes:
Environment mit Remote-Property-Quellen initialisieren.@RefreshScope für Spring-@Beans, die bei Konfigurationsänderungen neu initialisiert werden sollen./env zum Aktualisieren der Environment und Neubinden von @ConfigurationProperties und Log-Leveln.
** /refresh zum Aktualisieren der @RefreshScope-Beans.
** /restart zum Neustarten des Spring-Kontexts (standardmäßig deaktiviert).
** /pause und /resume zum Aufrufen der Lifecycle-Methoden (stop() und start() auf dem ApplicationContext).== Schnellstart
Dieser Schnellstart führt durch die Verwendung von Server und Client von Spring Cloud Config Server.
Starten Sie zuerst den Server wie folgt:
Der Server ist eine Spring-Boot-Anwendung, sodass Sie ihn bei Bedarf auch aus Ihrer IDE heraus ausführen können (die Hauptklasse ist ConfigServerApplication).
Testen Sie als Nächstes einen Client wie folgt:
Die Standardstrategie zum Auffinden von Property-Quellen besteht darin, ein Git-Repository (unter spring.cloud.config.server.git.uri) zu klonen und es zur Initialisierung einer Mini-SpringApplication zu verwenden.
Die Environment der Mini-Anwendung wird verwendet, um Property-Quellen aufzulisten und über einen JSON-Endpunkt zu veröffentlichen.
Der HTTP-Dienst stellt Ressourcen in der folgenden Form bereit:
wobei application als spring.config.name in die SpringApplication injiziert wird (was in einer normalen Spring-Boot-App normalerweise application ist), profile ein aktives Profil ist (oder eine durch Kommas getrennte Liste von Eigenschaften) und label ein optionales Git-Label ist (Standardwert: master.)
Spring Cloud Config Server bezieht Konfiguration für Remote-Clients aus verschiedenen Quellen. Das folgende Beispiel bezieht die Konfiguration aus einem Git-Repository (das bereitgestellt werden muss), wie im folgenden Beispiel gezeigt:
Weitere mögliche Quellen sind JDBC-kompatible Datenbanken, Subversion, Hashicorp Vault, Credhub und lokale Dateisysteme.
=== Clientseitige Verwendung
Um diese Funktionen in einer Anwendung zu nutzen, können Sie sie als Spring-Boot-Anwendung erstellen, die von spring-cloud-config-client abhängt (ein Beispiel finden Sie in den Testfällen für den Config-Client oder in der Beispielanwendung).
Der bequemste Weg, die Abhängigkeit hinzuzufügen, ist ein Spring-Boot-Starter org.springframework.cloud:spring-cloud-starter-config.
Es gibt außerdem ein Parent-POM und eine BOM (spring-cloud-starter-parent) für Maven-Benutzer sowie eine Properties-Datei für die Spring-IO-Versionsverwaltung für Gradle- und Spring-CLI-Benutzer. Das folgende Beispiel zeigt eine typische Maven-Konfiguration:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>{spring-boot-docs-version}</version>
<relativePath /> <!-- lookup parent from repository -->
</parent>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>{spring-cloud-version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
<!-- repositories also needed for snapshots and milestones -->
Jetzt können Sie eine Standard-Spring-Boot-Anwendung erstellen, z. B. den folgenden HTTP-Server:
@SpringBootApplication @RestController public class Application {
@RequestMapping("/")
public String home() {
return "Hello World!";
}
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}