control

Spring Cloud Config Server nos permite crear un servidor en el que centralizar las configuraciones de nuestras aplicaciones. Ésto es imprescindible en sistemas con múltiples servicios y desarrolladores.
Además, nos permite crear diferentes perfiles, facilitándonos la vida si utilizamos Git flow, o cualquier organización de entornos previos a producción, en el que nuestras aplicaciones pueden tener una configuración distinta para entornos de desarrollo, test e integración.
Tiene la ventaja añadida de que nos va a proveer la información a través de HTTP en formato JSON, siendo por tanto, independiente del lenguaje de programación o el framework utilizado.

Dependencias

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

Repositorio

Spring Cloud Config Server admite gestionar nuestras configuraciones con los controladores de versiones SVN o Git.
Deberemos crear por lo tanto, un repositorio en el que ubicar nuestra configuración. Para el ejemplo proporcionado, he creado el directorio config .
Es el ejemplo mas simple posible, un archivo de configuración application.properties.

Servidor

En nuestra aplicación será necesario únicamente añadir la anotación “@EnableConfigServer” en la clase principal:

package com.juanmorschrott.server;

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

@EnableConfigServer
@SpringBootApplication
public class Application {

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

}

Y en el archivo de configuración (application.properties o application.yml), la URI de nuestro repositorio:

server:
  port: 8888
spring:
  application:
    name: config-server
  cloud:
    config:
      server:
        git:
          uri: https://github.com/juanmorschrott/config

Un apunte. He cambiado el puerto a través del cual será accesible el servicio a “8888”, ya que es el puerto por defecto al que va a intentar conectarse nuestro cliente.

Probaremos que funciona correctamente arrancando el servicio y ejecutando:

terminal

En el que “config-server” será el nombre de nuestra aplicación y “default” el nombre del profile. Puesto que no hemos indicado ningúno, éste será el establecido por defecto.
Vemos que nos muestra la URI de nuestro repositorio Git y nuestras propiedades: custom.name: juan.

Cliente

El cliente conectado a nuestro servidor de configuración deberá contar con la anotación “@EnableDiscoverClient”:

package com.juanmorschrott.client;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

@EnableDiscoveryClient
@SpringBootApplication
public class ClientApplication {

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

}

Resultado

Podéis encontrar el código de ejemplo aquí, y el código del repositorio de configuración aquí.
Básicamente consiste en una aplicación Web que mostrará un saludo (“hello [custom.name]”) a un nombre que obtendrá de nuestro servidor de configuración.

@Configuration
@EnableAutoConfiguration
@RestController
@RequestMapping("/")
public class HelloController {

    @Value("${custom.name}")
    String customName;

    @GetMapping
    public String hello() {
        return "Hello " + customName;
    }

}

En primer lugar arrancaremos nuestro config server bien mediante un IDE o bien mediante el comando:

$ mvn spring-boot:run

A continuación procedemos de igual modo con el cliente, y podemos comprobar el resultado:

Conclusión

Hemos visto que gracias a la librería Spring Cloud Config Server podemos crear un servicio centralizado en el que gestionar nuestras configuraciones, contando con las ventaja de estar administrado por un software controlador de versiones.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Translate