
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 auf dem ).== 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);
}
Wenn dieser HTTP-Server läuft, übernimmt er die externe Konfiguration vom standardmäßigen lokalen Config Server (falls vorhanden) auf Port 8888.
Um das Startverhalten zu ändern, können Sie den Speicherort des Config Servers mit bootstrap.properties ändern (ähnlich wie application.properties, aber für die Bootstrap-Phase des Anwendungskontexts), wie im folgenden Beispiel:
Standardmäßig wird, wenn kein Anwendungsname festgelegt ist, application verwendet. Um den Namen zu ändern, kann die folgende Eigenschaft zur Datei bootstrap.properties hinzugefügt werden:
HINWEIS: Wenn Sie die Eigenschaft ${spring.application.name} setzen, stellen Sie Ihrem App-Namen nicht das reservierte Wort application- voran, um Probleme bei der Auflösung der korrekten Property-Quelle zu vermeiden.
Die Bootstrap-Eigenschaften erscheinen im /env-Endpunkt als hochpriorisierte Property-Quelle, wie im folgenden Beispiel gezeigt:
Eine Property-Quelle namens ```configService:/enthält diefoo-Eigenschaft mit dem Wert bar` und hat die höchste Priorität.
HINWEIS: Die URL im Namen der Property-Quelle ist das Git-Repository, nicht die URL des Config Servers.
=== Beispielanwendung
Eine Beispielanwendung finden Sie https://github.com/spring-cloud/spring-cloud-config/tree/master/spring-cloud-config-sample[hier].
Es ist eine Spring Boot-Anwendung, daher können Sie sie mit den üblichen Mechanismen ausführen (z.B. mvn spring-boot:run).
Wenn sie läuft, sucht sie den Config Server unter http://localhost:8888 (ein konfigurierbarer Standardwert), sodass Sie auch den Server starten können, um zu sehen, wie alles zusammenarbeitet.
Das Beispiel enthält einen Testfall, bei dem der Config Server ebenfalls in derselben JVM gestartet wird (mit einem anderen Port), und der Test stellt sicher, dass eine Umgebungseigenschaft aus dem Git-Konfigurations-Repository vorhanden ist.
Um den Speicherort des Config Servers zu ändern, können Sie spring.cloud.config.uri in bootstrap.yml (oder in Systemeigenschaften und anderen Orten) setzen.
Der Testfall hat eine main()-Methode, die den Server auf die gleiche Weise startet (beobachten Sie die Logs nach seinem Port), sodass Sie das gesamte System in einem Prozess ausführen und damit experimentieren können (z.B. können Sie die main()-Methode in Ihrer IDE ausführen).
Die main()-Methode verwendet target/config als Arbeitsverzeichnis des Git-Repositorys, sodass Sie dort lokale Änderungen vornehmen und diese in der laufenden Anwendung widerspiegeln können. Das folgende Beispiel zeigt eine Sitzung mit dem Testfall:
Der Refresh-Endpunkt meldet, dass sich die Eigenschaft "sample" geändert hat.
== Bauen
:jdkversion: 1.7
=== Basis-Kompilierung und Test
Um den Quellcode zu erstellen, müssen Sie JDK {jdkversion} installieren.
Spring Cloud verwendet Maven für die meisten Build-Aktivitäten, und Sie sollten recht schnell loslegen können, indem Sie das gewünschte Projekt klonen und Folgendes eingeben:
HINWEIS: Sie können auch Maven (>=3.3.3) selbst installieren und in den folgenden Beispielen den Befehl mvn anstelle von ./mvnw verwenden. Wenn Sie das tun, müssen Sie möglicherweise -P spring hinzufügen, falls Ihre lokalen Maven-Einstellungen keine Repository-Deklarationen für Spring-Vorabversionen enthalten.
HINWEIS: Beachten Sie, dass Sie möglicherweise den für Maven verfügbaren Arbeitsspeicher erhöhen müssen, indem Sie eine Umgebungsvariable MAVEN_OPTS mit einem Wert wie -Xmx512m -XX:MaxPermSize=128m setzen. Wir versuchen, dies in der .mvn-Konfiguration abzudecken. Sollten Sie dies dennoch tun müssen, um einen Build erfolgreich abzuschließen, erstellen Sie bitte ein Ticket, damit die Einstellungen zur Versionsverwaltung hinzugefügt werden.
Hinweise zum Bau des Projekts finden Sie in der .travis.yml, falls vorhanden. Dort sollte ein "script" und ggf. ein "install"-Befehl stehen. Achten Sie auch auf den Abschnitt "services", um zu sehen, ob lokal Dienste ausgeführt werden müssen (z.B. Mongo oder Rabbit). Ignorieren Sie die git-bezogenen Teile, die Sie in "before_install" finden könnten, da sie sich auf die Einrichtung von Git-Anmeldeinformationen beziehen und diese bereits vorhanden sind.
Projekte, die Middleware benötigen, enthalten in der Regel eine docker-compose.yml. Ziehen Sie daher in Betracht, https://docs.docker.com/compose/[Docker Compose] zu verwenden, um die Middleware-Server in Docker-Containern auszuführen. Lesen Sie die README im https://github.com/spring-cloud-samples/scripts[Skript-Demo-Repository] für spezifische Anweisungen zu den häufigsten Fällen (Mongo, Rabbit und Redis).
HINWEIS: Wenn alles andere fehlschlägt, bauen Sie mit dem Befehl aus .travis.yml (normalerweise ./mvnw install).
=== Dokumentation
Das Modul spring-cloud-build hat ein "docs"-Profil. Wenn Sie es aktivieren, wird versucht, AsciiDoc-Quellen aus src/main/asciidoc zu erstellen. Im Rahmen dieses Prozesses sucht es nach einer README.adoc und verarbeitet sie, indem es alle Includes lädt, aber nicht parst oder rendert – es wird nur nach ${main.basedir} kopiert (standardmäßig ${basedir}, also das Projektstammverzeichnis). Wenn es Änderungen in der README gibt, erscheinen diese nach einem Maven-Build als geänderte Datei an der richtigen Stelle. Committen Sie sie einfach und pushen Sie die Änderung.
=== Arbeiten mit dem Code Wenn Sie keine Präferenz für eine IDE haben, empfehlen wir die Verwendung von https://www.springsource.com/developer/sts[Spring Tools Suite] oder https://eclipse.org[Eclipse] bei der Arbeit mit dem Code. Wir verwenden das https://eclipse.org/m2e/[m2eclipse] Eclipse-Plugin für die Maven-Unterstützung. Andere IDEs und Tools sollten ebenfalls ohne Probleme funktionieren, solange sie Maven 3.3.3 oder besser verwenden.
==== Importieren in Eclipse mit m2eclipse Wir empfehlen das https://eclipse.org/m2e/[m2eclipse] Eclipse-Plugin für die Arbeit mit Eclipse. Wenn Sie m2eclipse noch nicht installiert haben, ist es im "Eclipse Marketplace" erhältlich.
HINWEIS: Ältere Versionen von m2e unterstützen Maven 3.3 nicht. Nachdem die Projekte in Eclipse importiert wurden, müssen Sie m2eclipse daher mitteilen, das richtige Profil für die Projekte zu verwenden. Wenn Sie viele verschiedene Fehler in Bezug auf die POMs in den Projekten sehen, überprüfen Sie, ob Sie eine aktuelle Installation haben. Wenn Sie m2e nicht aktualisieren können, fügen Sie das "spring"-Profil zu Ihrer settings.xml hinzu. Alternativ können Sie die Repository-Einstellungen aus dem "spring"-Profil des Parent POM in Ihre settings.xml kopieren.
==== Importieren in Eclipse ohne m2eclipse Wenn Sie m2eclipse nicht verwenden möchten, können Sie die Eclipse-Projektmetadaten mit dem folgenden Befehl generieren:
$ ./mvnw eclipse:eclipse
Die generierten Eclipse-Projekte können importiert werden, indem Sie im Menü Datei die Option Vorhandene Projekte importieren auswählen.
=== JCE
Wenn Sie eine Ausnahme aufgrund von "Illegal key size" erhalten und Suns JDK verwenden, müssen Sie die Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files installieren. Weitere Informationen finden Sie unter den folgenden Links:
https://www.oracle.com/technetwork/java/javase/downloads/jce-6-download-429243.html[Java 6 JCE]
https://www.oracle.com/technetwork/java/javase/downloads/jce-7-download-432124.html[Java 7 JCE]
https://www.oracle.com/technetwork/java/javase/downloads/jce8-download-2133166.html[Java 8 JCE]
Extrahieren Sie die JCE-Dateien in den Ordner JDK/jre/lib/security für die jeweilige Version von JRE/JDK (x64/x86), die Sie verwenden.
== Mitwirken
:spring-cloud-build-branch: master
Spring Cloud wird unter der nicht einschränkenden Apache 2.0-Lizenz veröffentlicht und folgt einem sehr standardmäßigen Github-Entwicklungsprozess, bei dem der Github-Tracker für Probleme und das Zusammenführen von Pull-Anfragen in den Master verwendet wird. Wenn Sie auch nur etwas Triviales beitragen möchten, zögern Sie nicht, aber befolgen Sie die unten stehenden Richtlinien.
=== Unterzeichnen der Contributor License Agreement Bevor wir einen nicht-trivialen Patch oder Pull Request akzeptieren, benötigen wir Ihre Unterschrift unter der https://cla.pivotal.io/sign/spring[Contributor License Agreement]. Die Unterzeichnung der Contributor License Agreement gewährt niemandem Commit-Rechte im Haupt-Repository, bedeutet aber, dass wir Ihre Beiträge akzeptieren können und Sie eine Autorennennung erhalten, wenn wir dies tun. Aktive Mitwirkende könnten eingeladen werden, dem Kernteam beizutreten und die Möglichkeit erhalten, Pull Requests zusammenzuführen.
=== Verhaltenskodex Dieses Projekt hält sich an den Contributor Covenant https://github.com/spring-cloud/spring-cloud-build/blob/master/docs/src/main/asciidoc/code-of-conduct.adoc[Code of Conduct]. Durch Ihre Teilnahme erklären Sie sich mit der Einhaltung dieses Codes einverstanden. Bitte melden Sie inakzeptables Verhalten an [email protected].
=== Code-Konventionen und Hausordnung Keiner dieser Punkte ist für einen Pull Request zwingend erforderlich, aber sie helfen alle. Sie können auch nach dem ursprünglichen Pull Request, aber vor einem Merge hinzugefügt werden.
eclipse-code-formatter.xml des https://raw.githubusercontent.com/spring-cloud/spring-cloud-build/master/spring-cloud-dependencies-parent/eclipse-code-formatter.xml[Spring Cloud Build]-Projekts importieren. Bei Verwendung von IntelliJ können Sie das https://plugins.jetbrains.com/plugin/6546[Eclipse Code Formatter Plugin] verwenden, um dieselbe Datei zu importieren..java-Dateien einen einfachen Javadoc-Klassenkommentar mit mindestens einem @author-Tag (der Sie identifiziert) und vorzugsweise mindestens einem Absatz darüber enthalten, wofür die Klasse gedacht ist..java-Dateien hinzu (kopieren Sie ihn aus bestehenden Dateien im Projekt).@author zu den .java-Dateien hinzu, die Sie wesentlich ändern (mehr als kosmetische Änderungen).=== Checkstyle
Spring Cloud Build enthält eine Reihe von Checkstyle-Regeln. Sie finden sie im Modul spring-cloud-build-tools. Die wichtigsten Dateien im Modul sind:
<1> Standard-Checkstyle-Regeln <2> Dateikopf-Einrichtung <3> Standard-Unterdrückungsregeln
==== Checkstyle-Konfiguration
Checkstyle-Regeln sind standardmäßig deaktiviert. Um Checkstyle zu Ihrem Projekt hinzuzufügen, definieren Sie einfach die folgenden Eigenschaften und Plugins.
<reporting>
<plugins>
<plugin> <5>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-checkstyle-plugin</artifactId>
</plugin>
</plugins>
</reporting>
${project.root}/src/checkstyle/checkstyle-suppressions.xml mit Ihren Unterdrückungen zu definieren. Beispiel:.projectRoot/src/checkstyle/checkstyle-suppresions.xmlEs empfiehlt sich, die Dateien ${spring-cloud-build.rootFolder}/.editorconfig und ${spring-cloud-build.rootFolder}/.springformat in Ihr Projekt zu kopieren. Auf diese Weise werden einige Standard-Formatierungsregeln angewendet. Sie können dies durch Ausführen dieses Skripts tun:```bash
$ curl https://raw.githubusercontent.com/spring-cloud/spring-cloud-build/master/.editorconfig -o .editorconfig
$ touch .springformat
=== IDE-Einrichtung
==== Intellij IDEA
Um Intellij einzurichten, sollten Sie unsere Codierungskonventionen, Inspektionsprofile importieren und das Checkstyle-Plugin einrichten.
Die folgenden Dateien befinden sich im https://github.com/spring-cloud/spring-cloud-build/tree/master/spring-cloud-build-tools[Spring Cloud Build] Projekt.
.spring-cloud-build-tools/
----
└── src
├── checkstyle
│ └── checkstyle-suppressions.xml <3>
└── main
└── resources
├── checkstyle-header.txt <2>
├── checkstyle.xml <1>
└── intellij
├── Intellij_Project_Defaults.xml <4>
└── Intellij_Spring_Boot_Java_Conventions.xml <5>
----
<1> Standard-Checkstyle-Regeln
<2> Dateikopf-Einrichtung
<3> Standard-Unterdrückungsregeln
<4> Projektvorgaben für Intellij, die die meisten Checkstyle-Regeln anwenden
<5> Projektstil-Konventionen für Intellij, die die meisten Checkstyle-Regeln anwenden
.Codestil
image::https://raw.githubusercontent.com/spring-cloud/spring-cloud-build/{spring-cloud-build-branch}/docs/src/main/asciidoc/images/intellij-code-style.png[Codestil]
Gehen Sie zu `File` -> `Settings` -> `Editor` -> `Code style`. Klicken Sie dort auf das Symbol neben dem Abschnitt `Scheme`. Klicken Sie dann auf den Wert `Import Scheme` und wählen Sie die Option `Intellij IDEA code style XML`. Importieren Sie die Datei `spring-cloud-build-tools/src/main/resources/intellij/Intellij_Spring_Boot_Java_Conventions.xml`.
.Inspektionsprofile
image::https://raw.githubusercontent.com/spring-cloud/spring-cloud-build/{spring-cloud-build-branch}/docs/src/main/asciidoc/images/intellij-inspections.png[Codestil]
Gehen Sie zu `File` -> `Settings` -> `Editor` -> `Inspections`. Klicken Sie dort auf das Symbol neben dem Abschnitt `Profile`. Klicken Sie dann auf `Import Profile` und importieren Sie die Datei `spring-cloud-build-tools/src/main/resources/intellij/Intellij_Project_Defaults.xml`.
.Checkstyle
Damit Intellij mit Checkstyle funktioniert, müssen Sie das Plugin `Checkstyle` installieren. Es empfiehlt sich auch, `Assertions2Assertj` zu installieren, um JUnit-Assertions automatisch zu konvertieren.
image::https://raw.githubusercontent.com/spring-cloud/spring-cloud-build/{spring-cloud-build-branch}/docs/src/main/asciidoc/images/intellij-checkstyle.png[Checkstyle]
Gehen Sie zu `File` -> `Settings` -> `Other settings` -> `Checkstyle`. Klicken Sie dort auf das `+`-Symbol im Abschnitt `Configuration file`. Dort müssen Sie festlegen, woher die Checkstyle-Regeln bezogen werden sollen. Im obigen Bild haben wir die Regeln aus dem geklonten Spring Cloud Build Repository ausgewählt. Sie können jedoch auch auf das GitHub-Repository von Spring Cloud Build verweisen (z. B. für die `checkstyle.xml`: `https://raw.githubusercontent.com/spring-cloud/spring-cloud-build/master/spring-cloud-build-tools/src/main/resources/checkstyle.xml`). Wir müssen die folgenden Variablen bereitstellen:
- `checkstyle.header.file` – Bitte verweisen Sie auf die Datei `spring-cloud-build-tools/src/main/resources/checkstyle-header.txt` von Spring Cloud Build, entweder in Ihrem geklonten Repository oder über die URL `https://raw.githubusercontent.com/spring-cloud/spring-cloud-build/master/spring-cloud-build-tools/src/main/resources/checkstyle-header.txt`.
- `checkstyle.suppressions.file` – Standard-Unterdrückungen. Bitte verweisen Sie auf die Datei `spring-cloud-build-tools/src/checkstyle/checkstyle-suppressions.xml` von Spring Cloud Build, entweder in Ihrem geklonten Repository oder über die URL `https://raw.githubusercontent.com/spring-cloud/spring-cloud-build/master/spring-cloud-build-tools/src/checkstyle/checkstyle-suppressions.xml`.
- `checkstyle.additional.suppressions.file` – Diese Variable entspricht Unterdrückungen in Ihrem lokalen Projekt. Wenn Sie z. B. an `spring-cloud-contract` arbeiten, verweisen Sie auf den Ordner `project-root/src/checkstyle/checkstyle-suppressions.xml`. Ein Beispiel für `spring-cloud-contract` wäre: `/home/username/spring-cloud-contract/src/checkstyle/checkstyle-suppressions.xml`.
WICHTIG: Denken Sie daran, den `Scan Scope` auf `All sources` zu setzen, da wir Checkstyle-Regeln für Produktions- und Testquellen anwenden.
start()ApplicationContextFixes gh-XXXX