devstory

Comprendre Spring Cloud Config Server avec un exemple

  1. Objectifs de cette leçon
  2. Config Server - Tại sao?
  3. Comment Config Server sauvegarde-t-il des données ?
  4. Créer le projet Spring Boot
  5. Configurer Config Server
  6. Exécuter l'application

1. Objectifs de cette leçon

OK, voici la première étape pour que vous contruisiez une application distribuée en utilisant Spring Cloud. Dans cette leçon, je vous donnerai des instructions de la création d'un service pour manager d'une configuration d'autres services.
Les contenus seront discutés dans cette leçon y compris:
  • Qu'est-ce que Config Server ? Pourquoi avez-vous besoin de Config Server dans des applications distribuées.
  • Exlication de la Gestion centralisée des configurations (Centralized Configuration management), et gestion de version / gestion de configuration (Versioned Configuration Management).
  • Établissement d'un répertoire (Repository), pour stocker l'information de configuration.
  • Construction (Build) et Exécution (Run) de Spring Cloud Config Server.

2. Config Server - Tại sao?

OK, nous allons maintenant discuter pourquoi vous avez besoin d'un service qui gère les configurations pour d'autres services dans une application distribuée (Distributed Application).
Voici l'illustration d'une application distribuée - "Taxi Management", comprenant trois sous-applications, chacune étant déployée sur un serveur.
Chaque service (application) est un projet développé par une équipe de développeurs. Dans un projet, af part du code, il contient des configurations, par exemple, des informations connectées à la base de données, des informations sur l'emplacement des sources de données, etc .. Ce sera une mauvaise idée si vous codez en dur (hard code) ces informations dans le code du projet. Par conséquent, cette information est normalement placée dans des fichiers séparés, appelés fichiers de configuration (Configuration file).
Une fois terminé, le projet sera emballé (pack) et déployé sur le Serveur. Normalement, les fichiers de configuration seront regroupés ensemle avec le code et formeront un produit unique (fichier). Ainsi, s'il y a des changements de la configuration, vous devez compiler (compile) et emballer (pack) ce projet et le redéployer sur le serveur. C'est évidemment un défi dans un système de programmation distribué.
Config Server?
L'idée pour résoudre le problème ci-dessus est qu'un service (application) est nécessaire de gérer les configurations pour d'autres services. Il fonctionne indépendamment sur un serveur.
Ces idées ci-dessus apportent les bénifices suivants :
  • TODO
  • Spring Cloud Bus:
Lorsque vous changez un fichier de configuration sur Config-Server, vous voudrez sûrement informer ces changements aux Clients. Le Spring Cloud Bus fournit un mécanisme permettant d'informer les Clients que' "il y a un changement" et demande des Clients de mettre à jour les nouvelles informations.

3. Comment Config Server sauvegarde-t-il des données ?

Lorsque vous mettez tous les fichiers de configuration sur Config Server, vous vous poserez la question comment Config Server les stocke ?
Il y a deux manières principales que Config Server emmagasine ces fichiers de configuration :
  1. Il les stocke sur le disque dur du serveur comme des fichiers du système (Files system).
  2. Il utilise GIT ou SVN (Subversion).
Dans cette leçon, je vais créer un Config Server, qui emmagasine des fichiers de configurations sur GitHub. J'ai créé un GitHub Repository (Le répertoire) :

4. Créer le projet Spring Boot

Sur Eclipse créez un projet Spring Boot:
Saisissez :
  • Name: SpringCloudConfigServer
  • Group: org.o7planning
  • Artifact: SpringCloudConfigServer
  • Description: Spring Cloud Config Server
  • Package: org.o7planning.scconfigserver
La version d'essai Spring Boot 2.0.0.M..xx est buggée avec Spring Cloud par conséquent, nous allons utiliser la version Spring Boot 1.5.9.
OK, le projet a été créé :
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
    http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.o7planning</groupId>
    <artifactId>SpringCloudConfigServer</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>SpringCloudConfigServer</name>
    <description>Spring Cloud Config Server</description>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.9.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
        <spring-cloud.version>Edgware.RELEASE</spring-cloud.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-config-server</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <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>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>


</project>
@EnableConfigServer
SpringCloudConfigServerApplication.java
package org.o7planning.scconfigserver;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.config.server.EnableConfigServer;

@EnableConfigServer  // ==> Important!!
@SpringBootApplication
public class SpringCloudConfigServerApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringCloudConfigServerApplication.class, args);
    }
    
}

5. Configurer Config Server

Ce service (application) sera déployé et exécute sur le port 8888 et stocke des fichiers de configurations sur GitHub, alors, vous avez besoin de certaines configurations dans le fichier application.properties.
application.properties
server.port=8888

spring.cloud.config.server.git.uri=https://github.com/o7planning/spring-cloud-config-git-repo-example.git

# For File System:
# spring.profiles.active=native
# spring.cloud.config.server.native.searchLocations=C:/Users/tran/Desktop/config
Si Git Server (Ou SVN Server) exige un username/password vous devez donc faire des configurations supplémentaires, vous pouvez faire des références dans l'annexe à la fin de cet article.

6. Exécuter l'application

Cliquez sur le bouton droit du projet et sélectionnez :
  • Run As/Spring Boot App