Comenzamos una serie de cuatro artículos que van a tener como objetivo sacar el máximo partido a la plataforma Spring Boot, que nació precisamente con la pretensión de simplificar el trabajo a los desarrolladores, y para ello realiza auto-configuración (convención en vez de configuración) de los componentes. Usa Spring JavaConfig y se puede configurar toda la plataforma sin necesidad de usar XML. Analizamos a fondo Microservicios con Spring Boot en 4 entregas:

Las aplicaciones de Spring Boot son muy sencillas:

import org.springframework.boot.*; 
import org.springframework.boot.autoconfigure.*; 
import org.springframework.web.bind.annotation.*; 
% endblock

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

Estructura del código

Ateniéndonos a la estructura hay tres formas de organizar el código de los microservicios:

  1. Proyectos separados
  2. Un solo proyecto multimódulo
  3. Un solo proyecto sin módulos

La elección de uno u otro depende del grado de acoplamiento de los microservicios. Por norma general:

Para seguir esta serie de artículos se va a proceder a crear en un proyecto especial en Git [podéis descargarlo aquí], donde iremos completando la documentación. En un primer momento, hay que establecer un componente de arquitectura, y luego un proyecto multimódulo para los servicios concretos (que veremos más adelante en la siguiente entrega).

Componente de arquitectura

Para simplificar la programación se ha creado un componente de arquitectura de forma que sea más sencillo desarrollar los microservicios.

Este componente resuelve el tema de la seguridad, la configuración de los websockets, caché de datos, y se puede configurar el accesos al modelo de usuario con JDBC o MongoDB, etc. Esto facilita el desarrollo evitando la repetición de código.

https://git.paradigma.local/git/ArquitecturaMicroServiciosSprinBoot.git arquitecture 
MicroS2 code4

La seguridad se basa en anotaciones @PreAuthorize y @PostFilter:

@PreAuthorize("hasRole('admin') && @permissions.allowAny('model', 'read')") 
@PostFilter("@permissions.allow(filterObject.id, 'model', 'read')") 
public List<Model> getAll() { 
    ... 
}

Está definido un bean en Spring llamado permissions que se encarga de evaluar si se dispone de permisos para una entidad e ID dados. Se puede adaptar la nomenclatura para ajustarla a cada caso concreto, por ejemplo:

@permissions.allow(filterObject.id, 'es.paradigma.inditex.factura', 'imprimir') 
@permissions.allow(filterObject.id, 'es.paradigma.inditex.albaran', 'facturar') 
@permissions.allow(filterObject.id, 'es.paradigma.inditex.prenda',

Para autenticarse tan solo hay que hacer login con el body {"demo", "abcd123"} esto nos devuelve un head "X-AUTH-TOKEN" con el accessToken para poder hacer invocaciones en todos los servicios del proyecto.

Para configurar el acceso a la base de datos que se usa para validar los usuarios se hace uso del archivo arquitectura.yml en donde se guardan todas las propiedades de configuración de la arquitectura común de microservicios.

Hasta aquí esta primera parte en la que hemos intentado conocer cómo funciona Spring Boot. En la próxima entrega montaremos un proyecto multimódulo con la herramienta Gradle.

Y, ¿qué más?

Si quieres seguir profundizando en Spring Boot te contamos aquí cómo crear Tests integrados en Spring Boot con Fongo y cómo documentar tus microservicios SpringBoot con SpringFox.

Además, si quieres estar al día de todo lo relacionado con el ecosistema Spring y sus alrededores, no te pierdas este post todo lo que ocurrió en Spring IO 2022, uno de los eventos más importantes de la comunidad del software en España.

Cuéntanos qué te parece.

Los comentarios serán moderados. Serán visibles si aportan un argumento constructivo. Si no estás de acuerdo con algún punto, por favor, muestra tus opiniones de manera educada.

Suscríbete

Estamos comprometidos.

Tecnología, personas e impacto positivo.