Centralizovaná konfigurácia microservicov cez Spring Boot

Microservice založený na Spring Boot si môže stiahnuť svoju konfiguráciu z centralizovaného miesta. To uľahčí jeho nasadenie pre rozličné prostredia.

Spring Cloud Client Config umožňuje spustiť jednoduchý server so zverejneným REST API. Ľubovoľný springácky microservice sa vie k nemu pripojiť a stiahnuť si z neho Environment, z ktorého vie dokonfigurovať svoje properties.

Budeme potrebovať:

  • server s konfiguráciu
  • klienta

Server s konfiguráciou

Server bude založený na Spring Boote. Dokonfigurujeme

  • pom.xml
  • spúšťajúcu triedu
  • konfiguráciu servera
  • konfiguráciu jednotlivých microservicov

Pom, pom, pom

<?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>sk.upjs.ics</groupId>
    <artifactId>novotnyr-config-discovery</artifactId>
    <version>0.0.1-SNAPSHOT</version>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.3.0.RELEASE</version>
    </parent>

    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-config-server</artifactId>
            <version>1.0.3.RELEASE</version>
        </dependency>
    </dependencies>
</project>

Začneme s rodičom zo Spring Bootu a dotiahneme závislosť na spring-cloud-config-server.

Hlavná trieda

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

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

Klasická springbootoidná vec, kde jadro je @EnableConfigServer, ktorý zaregistruje špeciálny kontrolér poskytujúci konfiguráciu pre jednotlivé microservicy.

Konfigurácia servera

Keďže máme Spring Boot, vieme nakonfigurovať aplikáciu v application.properties. Definujme len dve veci:

spring.profiles.active: native
server.port: 8095

Prvá určí zdroj konfiguračných súborov. Natívny profil bude vyťahovať konfiguráciu z CLASSPATH, čo je pre hrajkanie sa (a tento článok) dostačujúce. V reálnych podmienkach sa využije štandardné nastavenie, ktoré ťahá konfiguráky z gitovského repa.

Druhá určí HTTP port, kde bude sedieť REST API.

Konfigurácia microservicov

V src/main/resource vyrobme democlient.properties, čo bude konfigurácia pre microservice s názvom democlient.

codename=Demo

Spustenie servera

Stačí

mvn spring-boot:run

Test servera

Navštívte

http://localhost:8095/democlient/default

Tým získate konfiguráciu pre microservice democlient a profil default, čiže štandardný springácky profil.

Klient

Klient potrebuje:

  • vlastný POM
  • konfiguráciu pripojenia ku konfiguračnéhmu serveru
  • konfiguráciu aplikácie

POM

<?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>com.cubepad</groupId>
    <artifactId>cubepad-infra-discovery-client</artifactId>
    <version>3.0-SNAPSHOT</version>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.3.0.RELEASE</version>
    </parent>

    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-config</artifactId>
            <version>1.0.4.RELEASE</version>
        </dependency>
    </dependencies>
</project>

Konfigurácia konfigurácie

Vytvorme v src/main/resource súbor bootstrap.properties. Ten sa natiahne ešte pred štartom aplikácie a dokonca ešte pred naštelovaním application.properties.

spring.cloud.config.uri=http://localhost:8095
spring.cloud.config.failFast=true

Prvá možnosť smeruje na adresu konfiguračného servera, zatiaľ čo druhá, nepovinná, hovorí, že v prípade zlyhania pripojenia sa aplikácia zrúti už pri štarte.

Konfigurácia aplikácie

Konfigurácia aplikácie je v štandardnom application.properties:

spring.application.name=democlient
logging.level.org.springframework.web.client=DEBUG

Je veľmi dôležité nastaviť názov aplikácie! Ten sa totiž použije v REST volaní.

Menej podstatné je nastaviť loggovanie, kde uvidíte odchádzajúcu požiadavku na server.

Kód

Kód je klasika:

package com.cubepad.infra.discovery.client;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

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

}

Spustenie

Opäť stačí:

mvn spring-boot:run

Aplikácia sa spustí, odletí požiadavka na konfiguračný server, a získa sa Environment s najvyššou prioritou, ktorá je ešte prednejšia než application.properties.

Ak zavediete do aplikácie actuator, uvidíte výsledok vo volaní /env.

Ako ďalej?

Konfiguráciu možno ťahať ďalej: napr. integrovať sa s projektom Eureka či Consul.

Pridaj komentár

Vaša e-mailová adresa nebude zverejnená. Vyžadované polia sú označené *