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:

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.