En las lecciones anteriores nos familiarizamos con el concepto de gestión centralizada de configuraciones y con las posibilidades de Spring Cloud Config. Hoy no nos meteremos en teoría, sino que iremos directo a la práctica, porque, como se suele decir, teoría sin práctica es como código sin tests: parece que funciona, pero algo falla.
Hoy crearemos un Spring Cloud Config Server, lo conectaremos a un repositorio Git y comprobaremos cómo sirve las configuraciones. ¡Vamos!
Paso 1: Crear el proyecto Spring Cloud Config Server
1.1 Usamos Spring Initializr
Puedes crear un nuevo proyecto en la web de Spring Initializr o desde tu IDE favorito. Aquí están los parámetros principales que debes indicar:
- Project: Maven
- Language: Java
- Spring Boot Version: 3.0.0 (o la versión estable más reciente)
- Dependencies: añade Spring Cloud Config Server
O simplemente copia esta sección en tu pom.xml si creas el proyecto manualmente:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>
Y no olvides añadir el BOM de Spring Cloud para que todo funcione correctamente:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>2022.0.0</version> <!-- Cámbialo por la versión actual -->
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
¡Ahora tienes un proyecto base!
1.2 La anotación @EnableConfigServer
Para que nuestro proyecto actúe como Config Server, basta con una anotación mágica. Abre el archivo Application.java y añade:
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.config.server.EnableConfigServer;
@SpringBootApplication
@EnableConfigServer // Habilitamos la funcionalidad de Spring Cloud Config Server
public class ConfigServerApplication {
public static void main(String[] args) {
SpringApplication.run(ConfigServerApplication.class, args);
}
}
Corto y potente.
Paso 2: Configurar el almacenamiento de configuraciones
2.1 Configuramos el repositorio Git
Las configuraciones del Config Server se guardarán en un repositorio Git. Para ello:
- Crea un repositorio vacío en GitHub, GitLab o en tu sistema local.
- Añade un archivo de configuración sencillo. Por ejemplo, crea
application.propertiesoapplication.yml:
# application.properties en el repositorio
example.property=Hello from the Config Server!
Pista: el nombre del archivo debe seguir el formato {application-name}.properties o {application-name}.yml. Esto es importante para distribuir configuraciones entre microservicios.
2.2 Configuración del Config Server
Ahora hay que decirle al Config Server dónde buscar los archivos de configuración.
En el application.yml de nuestra aplicación Config Server añade el siguiente bloque:
server:
port: 8888 # El Config Server funcionará en el puerto 8888
spring:
cloud:
config:
server:
git:
uri: https://github.com/tu-usuario/tu-repositorio # Indica la URL del repositorio
default-label: main # Rama del repositorio (main, master u otra)
Si tu repositorio es privado, añade usuario y contraseña:
spring:
cloud:
config:
server:
git:
uri: https://github.com/tu-usuario/tu-repositorio
username: tu-login
password: tu-contraseña
2.3 Comprobamos el funcionamiento del Config Server
Arranca tu aplicación Config Server. Si todo está bien, ve a la URL:
http://localhost:8888/{application}/{profile}/{label}
Ejemplo:
http://localhost:8888/application/default
Esto devolverá los datos de configuración desde el repositorio Git. Verás algo como:
{
"name": "application",
"profiles": ["default"],
"label": "main",
"version": "123abc",
"propertySources": [
{
"name": "https://github.com/tu-usuario/tu-repositorio/application.properties",
"source": {
"example.property": "Hello from the Config Server!"
}
}
]
}
¡Felicidades! Tu Config Server funciona.
Paso 3: Conectar un cliente al Config Server
3.1 Configuración del cliente
Ahora crearemos una aplicación cliente que obtenga las configuraciones del Config Server.
- Crea un nuevo proyecto Spring Boot.
- Añade la dependencia Spring Cloud Config Client:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
- Configura el archivo
application.ymldel cliente:
spring:
application:
name: my-client-application # El nombre debe coincidir con el archivo de configuración en el repositorio (my-client-application.properties)
cloud:
config:
uri: http://localhost:8888 # URL de nuestro Config Server
3.2 Usamos las configuraciones obtenidas
Creamos un controlador REST para comprobar si hemos recibido la configuración. Por ejemplo:
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class ConfigClientController {
@Value("${example.property}") // Obtenemos el valor desde el Config Server
private String exampleProperty;
@GetMapping("/config")
public String getConfig() {
return "Value of 'example.property' is: " + exampleProperty;
}
}
Ahora ejecuta el cliente y abre:
http://localhost:8080/config
Verás:
Value of 'example.property' is: Hello from the Config Server!
Errores típicos y cómo solucionarlos
Si tu Config Server o el cliente no funcionan, aquí tienes algunas comprobaciones:
- Config Server devuelve 404, 401 o 500. Revisa:
- La URL y la disponibilidad del repositorio.
- Usuario/contraseña (si el repositorio es privado).
- Si los archivos de configuración están en la rama indicada.
El cliente no puede conectarse al Config Server.
- Revisa
spring.cloud.config.urien la configuración del cliente. - Asegúrate de que el Config Server esté arrancado y accesible en el puerto indicado.
- Revisa
El cliente no recibe la configuración.
- Asegúrate de que el nombre del cliente (
spring.application.name) coincida con el nombre del archivo en el repositorio. - Asegúrate de que el archivo esté disponible y sea válido.
- Asegúrate de que el nombre del cliente (
Ahora tienes un Spring Cloud Config Server funcionando. Imagínate el poder que aporta para la gestión centralizada de microservicios. En la próxima lección aprenderemos a actualizar configuraciones "en caliente", para que tus aplicaciones puedan cambiar de estado tan rápido como los programadores cambian el código.
GO TO FULL VERSION