
Zentralisierter Konfigurationsserver für verteilte Systeme mit HTTP-API, Git-gestütztem Speicher, Eigenschaftsverschlüsselung/-entschlüsselung sowie Integration mit Vault, JDBC und lokalen Dateisystemen.
//// BEARBEITEN SIE DIESE DATEI NICHT. 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 die Externalisierung der Konfiguration in einem verteilten System. Mit dem Config Server haben Sie einen zentralen Ort, um externe Eigenschaften für Anwendungen in allen Umgebungen zu verwalten.
Die Konzepte auf Client und Server entsprechen identisch den Abstraktionen Environment und PropertySource von Spring, passen also sehr gut zu Spring-Anwendungen, können aber mit jeder Anwendung in jeder Sprache verwendet werden.
Wenn eine Anwendung den Bereitstellungsprozess von der Entwicklung über den Test bis zur Produktion durchläuft, können Sie die Konfiguration zwischen diesen Umgebungen verwalten und sicherstellen, dass die Anwendungen beim Wechsel alles haben, was sie zum Ausführen benötigen.
Die Standardimplementierung des Server-Speicher-Backends verwendet Git, sodass sie problemlos versionierte Konfigurationen unterstützt und über eine breite Palette von Werkzeugen zur Inhaltsverwaltung zugänglich ist.
Es ist einfach, alternative Implementierungen hinzuzufügen und sie über die Spring-Konfiguration einzubinden.
== Funktionen
=== Spring Cloud Config Server
Spring Cloud Config Server bietet die folgenden Vorteile:
@EnableConfigServer=== Spring Cloud Config Client
Speziell für Spring-Anwendungen bietet der Spring Cloud Config Client Folgendes:
Environment mit entfernten Property-Quellen.@RefreshScope für Spring @Beans, die bei Konfigurationsänderungen neu initialisiert werden sollen./env zum Aktualisieren des Environment und erneuten Binden von @ConfigurationProperties sowie Log-Levels.
** /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).== Kurzanleitung
Diese Kurzanleitung führt Sie durch die Verwendung von Server und Client des Spring Cloud Config Servers.
Starten Sie zunächst den Server wie folgt:
Der Server ist eine Spring Boot-Anwendung, sodass Sie sie bei Bedarf auch aus Ihrer IDE 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 zu klonen (unter spring.cloud.config.server.git.uri) und es zur Initialisierung einer Mini-SpringApplication zu verwenden.
Die Environment der Mini-Anwendung wird verwendet, um Property-Quellen aufzulisten und als 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 (normalerweise application in einer regulären Spring Boot-App), profile ein aktives Profil ist (oder eine durch Kommas getrennte Liste von Eigenschaften) und label eine optionale Git-Bezeichnung (Standard: master) ist.
Spring Cloud Config Server bezieht die Konfiguration für entfernte Clients aus verschiedenen Quellen. Das folgende Beispiel bezieht die Konfiguration aus einem Git-Repository (das bereitgestellt werden muss), wie im folgenden Beispiel gezeigt:
Weitere Quellen sind jede JDBC-kompatible Datenbank, Subversion, Hashicorp Vault, Credhub und lokale Dateisysteme.
=== Client-Seitige Nutzung
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 der Beispielanwendung).
Der bequemste Weg, die Abhängigkeit hinzuzufügen, ist ein Spring Boot-Starter org.springframework.cloud:spring-cloud-starter-config.
Es gibt auch ein Parent POM und BOM (spring-cloud-starter-parent) für Maven-Benutzer sowie eine Spring IO-Versionsverwaltungsdatei 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 standardmäßige Spring Boot-Anwendung erstellen, wie 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);
}