👁️
pierreinside
  • Introduction
  • Workbench
    • VirtualBox
    • Linux
      • Linux-Paketverwaltung
      • Linux Initialisierung
      • Ubuntu 14.10 LTS
      • Ubuntu 16.04 LTS
      • Ubuntu 18.04 LTS
      • Ubuntu 20.04 LTS
      • Ubuntu - Netzwerk
    • Konsole
      • ssh
      • zsh
      • cygwin
      • Babun
      • terminator
      • Terminal Multiplexer
      • Linux Tools
    • awesome
    • Entwicklungsumgebungen
      • Texteditors
      • Visual Studio Code
      • IntelliJ - IDEA
  • Softwareentwicklungsprozess
    • Schätzungen
    • Eventstorming
    • OKR
  • Architektur
    • Uncle Bob
    • Microservices
    • NoSQL
      • ElasticSearch
    • Hystrix
    • Reactive Programming
    • AngularJS
    • Service Mesh
  • Networking
    • Dependency Injection
  • Programming
    • Java Core/EE
      • Java 8
      • Java Annotationen
      • Bean Validation
      • Enterprise Java Beans Specification
      • Dependency Injection
    • JRebel
    • Webservices
      • HTTP
      • REST
      • Spring MVC REST
      • Swagger
      • Postman
    • Spring Ecosystem
      • Spring Core
      • Spring Boot
        • Programming
        • Production Ready
        • Testing
      • Spring Cloud
      • Spring Cloud Config
      • Spring MVC
      • Spring Data
      • Spring Petclinic
    • NodeJS
    • UI-Technologie
      • Thymeleaf
      • ionic
      • Web Fonts
      • Jinja Templates
      • Twitter Bootstrap
    • Python Ecosystem
      • Python Libraries
      • Python Testing
      • Python Best-Practices
      • Python Snippets
      • Python Selenium
      • Kivy UI
      • FastAPI
      • Typer CLI
      • Django
    • Groovy
    • Persistenz
      • Transactions
        • Java TX
        • JPA TX
      • TX Handling
      • JPA
        • Eclipse Link
      • MySQL
        • MySQL Performance
        • Docker MySQL
      • Hazelcast
    • Glassfish
    • YAML
    • Angular
    • Camel
    • Zeichenkodierung
    • Kinder lernen Programmieren
  • Testen
    • Easymock
    • Mockito
  • Performance & Scalability
    • Java Performance
      • Heapdump Analysis
    • Java Concurrency
    • Instana
  • Sicherheit
    • Authentifizierung
      • OpenID Connect
      • Web-Authentication API
    • Authorisierung
      • OAuth
      • SAML
    • Spring Security
    • Zertifikate
    • Kali Linux
    • VPN
    • Zero-Trust-Networks
  • Build und Deployment
    • Maven
    • Bamboo
    • Jenkins
      • Jenkins Pipelines
      • Jenkins Pipelines Tips und Tricks
      • Jenkins-configuration-as-Code
      • Jenkins IDE
    • Travis CI
    • Shellprogrammierung
      • jq - JSON Parsing
    • Konfiguration Management
    • Vagrant
      • Vagrant-Ansible-Integration
      • Vagrant Box bauen
    • Ansible
      • Getting Started
      • Ansible Details
    • Saltstack
    • LinuxKit
    • Container
      • Docker
        • Docker Getting Started
        • Debugging Docker
        • Docker Build
        • Docker Registry
        • Docker run
          • docker run
          • docker network
        • Docker Compose
        • docker machine
        • Docker@Windows
        • Docker Host
        • Docker Scaling
        • Docker Ressources
        • Docker Logging
        • windowsContainer
      • Cloud Deployment Provider
        • AWS
          • Anwendungsdeployment
          • Workload
          • Permissions
          • Netzwerke
          • AWS CLI
            • aws-vault
          • RDS
          • Static Website Hosting
          • EKS - Elastic Kubernetes Service
          • S3
        • Google Cloud Platform
      • Docker Orchestrierung
        • CoreOS
        • Kubernetes
          • microK8s
          • minikube
          • autoscaler
          • Docker
          • k9s
        • Nomad
    • PHP
  • Operations
    • Proxy
      • NGINX
    • DNS
    • Logging
      • Graylog
      • Fluentd
    • Monitoring
      • Grafana
    • Infrastructure-as-Code
      • Terraform
        • AWS-Provider
        • GitHub-Provider
      • Packer
    • Deployment
      • Vault
      • Consul
        • Consul Template
      • Fabio
  • Rechtliches
    • Software-Lizenzen
  • Git Ecosystem
    • Git
      • Git Lifecycle Hooks
    • GitHub
      • GitHub Organizations
    • GitHub Actions
    • GitHub Pages
    • GitHub CLI
    • GitHub Copilot
    • GitHub-AWS OIDC
    • GitBook
    • GitLab
    • Bitbucket/Stash
  • Publishing
    • WordPress
    • Markdown
    • Static Site Generators
      • Hugo
      • Jekyll
    • Tiddly Wiki
    • Leanpub
    • Animationsfilme
  • Storage
    • Synology 2012
    • Synology 2021
  • Collaboration
    • Übersicht
    • Microsoft Teams
  • Konferenzen
    • Velocity Berlin 2019
  • IT mit Kindern
    • Projekt Sportstracker
    • Scratch
    • Pico Spielekonsole
  • Schule
    • Mathematik
  • Misc
    • Foto/Video
      • Foto/Video Sammlung bis 2023
        • Handbrake
        • Onedrive
      • Foto/Video Sammlung ab 2024
      • Gopro
      • Panasonic FZ1000 ii
        • als Webcam
      • AV Receiver
      • Videos erstellen
        • OBS Studio
        • Touch Portal
        • Game-Streaming
      • Kameratasche
      • Kamera 2020
    • Handy
      • 2016
      • 2018
      • 2019
      • 2021
      • 2022
    • Computer
      • Laptop
        • 2018
        • Chromebook
      • Monitor
        • 4k
      • Software
        • Command Line Interface
        • Google API
        • Plant UML
        • Chromium
        • Passwort-Manager
        • GPG
      • Dell CNF 2665 Farbdrucker
      • Dockingstation
      • Gaming PC 2021
      • Mobiles Büro
      • Mobiles Internet
      • Mobiler Router
    • Beamer Benq W1000+
    • Spielekonsole
      • 2017
        • Playstation 4
      • Pico Spielekonsole
    • Gadgets
      • iPad Pro 2015 und 2016
      • iPad Air 2024
      • Macbook Pro
      • Smartwatch
      • Slate
      • Mudi
    • Fahrrad
      • Jonas 2018
      • SQLab
    • Auto
      • Auto 2022
      • Camping
        • Camping Touren Ideen
          • Camping Tour - Gardasee 2021
        • Camper
          • Camper klein - keine Stehhöhe
            • VW Bus Erfahrungen
          • Camper gross - Stehhöhe
    • Haus
      • Klimaanlage
      • Swimming Pool
      • Quick Mill Orione 3000
      • Spülmaschine 2021
      • Hebe-Schiebetür
      • Gasgrill
      • Minibar / Mini-Kühlschrank
      • Glasfaseranschluss (Fiber-to-the-Home)
      • Smart-Home
        • Raspberry Pi
        • Heimnetzwerk
      • Homeoffice
      • Energie
        • Solar
        • Wärmepumpe
    • Freizeit
      • Musik Streaming
      • Sky
      • Online Lernplattformen
      • eScooter - ePowerFun
    • Fußball
      • Meine Arbeit als Fußball-Trainer
      • Fußball Tools
      • DFB Talentförderung
    • Google Impact Challenge
  • Englisch
Powered by GitBook
On this page
  • Getting Started ...
  • Maven Dependencies
  • Deployment
  • Config-Repository anlegen
  • Applikation konfigurieren
  • Config-Server

Was this helpful?

  1. Programming
  2. Spring Ecosystem

Spring Cloud Config

  • Offizielle Dokumentation

Spring Boot bietet bereits eine komfortable Möglichzeit, die Konfiguration der Anwendung über Property-Files (oder Yaml-Files) zu steuern - siehe @Value und @ConfigurationProperties. Allerdings ist diese Konfiguration nach dem Start der Anwendnung nicht mehr änderbar (ohne die Anwendnung zu restarten). In einer Zeit, in der Anwendungen automatische skalieren und Failover mitbringen, ist das zu kurz gegriffen.

Spring Cloud Config soll diese Lücke clientseitig und serverseitig schließen.

Spring Cloud Config auf Spring Boot auf (vermutlich geht es auch in Nicht-Spring-Boot-Applikationen).


Getting Started ...

In diesem Beispiel werde ich eine Spring-Boot-Applikation bereitstellen, die auch gleichzeitig einen Spring Cloud Config Server bereitstellt. Die Spring-Boot-Application agiert also als Config-Client gegen den Config-Server.

Maven Dependencies

Die Dependencies

  • spring-cloud-config

  • spring-cloud-starter-config

  • spring-boot-starter-actuator

werden im pom.xml (sofern Maven verwendet wird) hinterlegt.

Deployment

Am schnellsten kommt man zu einer lauffähigen Spring Cloud Config Anwendnung durch die Verwendung des Spring Initializr. Nach Auswahl von

  • Actuator

  • Config Client

  • Config Server

  • Web

    • nur optional, aber ganz praktisch zum Testen - aus meiner Sicht sollte jede Applikation ein REST-Schnittstelle haben

Anschließend steht ein ZIP-Artefakt zum Download, in dem sich das Gerüst der Anwendung befindet.

Nach dem Build, steht das Executable-Jar fürs Deployment zur Verfügung:

mvn clean install
cd target
java -jar myapp.jar

Die vom Actuator bereitgestellte REST-Schnittstelle http://localhost:8081/env liefert schon erste Auskünfte:

{
    "profiles":[],
    "server.ports":{"local.server.port":8080}
  ...
}

Der Spring Boot Actuator steuert u. a. ein paar REST-Webservices zur Verfügung, über die Informationen zum Config-Server (http://localhost:8081/env) abgerufen werden können.

Zum erstellten Applikationscode fügen wir noch eine REST-Schnittstelle zum Testen ein:

@SpringBootApplication
@RestController
public class Application {

    @Value("${de.cachaca.learn.spring.configRepositoryProvider}")
    private String configRepositoryProvider;

    @RequestMapping(value = "/config", method = RequestMethod.GET)
    public String getConfig() {
        return configRepositoryProvider;
    }

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

und konfigurieren den de.cachaca.learn.spring.configRepositoryProvider über die application.properties:

de.cachaca.learn.spring.configRepositoryProvider = classpath

Nach dem Start der Anwendung sollte bei http://localhost:8081/config der Wert classpath ausgegeben werden.

Soweit nichts Neues ... aber im Folgenden machen wir die Konfiguration über einen Config-Server.

Config-Repository anlegen

Zum Testen kann ein lokales GIT-Repository angelegt werden:

mkdir de.cachaca.learn.spring.cloud-config
cd de.cachaca.learn.spring.cloud-config
git init
echo de.cachaca.learn.spring.configRepositoryProvider = local git repository > application.properties
git add application.properties
git commit -m "initial commit"

Applikation konfigurieren

Die SpringBoot-Applikation

@SpringBootApplication
@EnableConfigServer
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

wird zum Config-Client. Über @EnableConfigServer wird konfiguriert, daß es einen Config-Server gibt. Configuration Properties werden über

@Value("${de.cachaca.cloud.provider}")
private String cloudProvider;

injeziert. Zunächst werden die Properties im konfigurierten Config-Server gesucht (konfiguriert über application.properties#spring.cloud.config.uri). Wird dort nichts gefunden, wird im Classpath nach einer Property-Datei gesucht.

Dementsprechend wird in application.properties folgendes eingetragen:

spring.cloud.config.server.git.uri = file://${user.home}/src/external/de.cachaca.learn.spring.cloud-config

Nach einem Restart der Anwendnung wird bei http://localhost:8081/config der Wert local git repository ausgegeben werden.


Config-Server

Ein Config-Server ist der Service, der den Zugang zur Konfiguration bereitstellt. Die Konfiguration selber liegt in einem Configuration Repository:

  • Git-Repository

    • lokal: spring.cloud.config.server.git.uri: file://${user.home}/config-repo

    • remote: spring.cloud.config.server.git.uri: https://github.com/spring-cloud-samples/config-repo/bar.properties

Über @EnableConfigServer wird der Spring-Boot-Applikation der Hinweis zur Verwendung eines Config-Servers gegeben. Dadurch wird zuerst der Config-Server angefragt und dann erst Konfiguration aus dem Classpath.

PreviousSpring CloudNextSpring MVC

Last updated 3 years ago

Was this helpful?