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.