TL;DR

Kennt ihr das, euer Release ist gerade in Produktion angekommen, da fällt jemandem auf dass noch eine Einstellung geändert werden muss. Die Änderung ist in einer Minute gemacht, aber jetzt muss die gesamte Anwendung wieder neu installiert werden. Je nachdem wie lange ihr von DEV bis in Produktion braucht, kann das echt nervig sein. Zum Glück bietet Spring mit Spring Cloud Config eine elegante Lösung für dieses Problem.

Der folgende Artikel soll ganz kurz beschreiben wie ihr Spring Cloud Config in eure Anwendung einbindet. Wem das zu langweilig ist, kann sich auch direkt unser Beispielprojekt anschauen. Mit dem Projekt „Spring Cloud Config“ bietet Spring eine einfach Möglichkeit um seine Anwendungskonfiguration aus einer externen Quelle zu laden.

Eigentlich ist das Projekt für den Einsatz in Microservice Architekturen gedacht. Dabei beziehen die einzelnen Services ihrer Konfiguration von einem zentralen Konfigurationsserver, welcher mit Spring Cloud Config betrieben wird.

Dieses Tutorial soll erklären, wie man auch eine einzelne Spring Boot Anwendung mit Spring Cloud Config aus einer externen Quelle konfigurieren kann.

1. Einbindung von Spring Cloud Config

Als erstes müssen wir unserem Projekt Spring Boot und Spring Cloud Config als Abhängigkeit hinzufügen. Dafür müssen wir sowohl die „bill of materials“ (BOM) als auch die eigentlichen Dependencies einbinden.

...

<dependencyManagement>
    <dependencies>
        <!-- Spring Boot -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-dependencies</artifactId>
            <version>2.1.3.RELEASE</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>

        <!-- Spring Cloud-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>Greenwich.RELEASE</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

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

...

2. Konfiguration von Spring Cloud Config

Jetzt müssen wir Spring Cloud Config noch aktivieren und eine Quelle für die externe Konfiguration angeben. Dafür legen wir in den Ressourcen unserer Anwendung eine bootstrap.yml mit dem folgenden Inhalt an:

spring:
  cloud:
    config:
      server:
        bootstrap: true
        git:
          uri: https://bitbucket.org/pragtics/spring-boot-external-configuration.git
          search-paths: configuration

Mit der Property spring.cloud.config.server.bootstrap sagen wir der Anwendung, dass sie sich selbst mit der Konfiguration aus dem externen Repository konfigurieren soll.

Die Quelle für die externe Konfiguration ist in unserem Fall ein Git Repository. Mit der Eigenschaft search-paths bestimmen wir den Pfad zur Konfiguration innerhalb des Repositories.

Damit ist die Einrichtung abgeschlossen. Spring wird jetzt beim Start der Anwendung versuchen Konfigurationsdateien (*.yml, *.properties) aus dem angegebenen Pfad im Repository zu laden.

3. Test der Konfiguration

In unserem Test Repository befindet sich nur eine Konfigurationsdatei mit dem folgenden Inhalt:

configuration/application.yml

server:
  port: 1234

Wenn wir jetzt unsere Anwendung starten, sollte diese das Port 1234 statt dem standard Port 8080 verwenden. Zu erkenne ist das an folgendem Eintrag im Log:

Tomcat started on port(s): 1234 (http) with context path “