Introducción a Spring boot

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.

Las aplicaciones de Spring boot son muy sencillas:


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

@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.


$ git clone https://git.paradigma.local/git/ArquitecturaMicroServiciosSprinBoot.git arquitecture
$ cd arquitecture
$ gradle bootRun

Para crear un servicio nuevo usando la arquitectura creada es tan sencillo como sustituir la anotación @SpringBootApplication por @ParadigmaApplication, y se puede configurar el tipo de acceso para recuperar los datos de usuario. Por defecto está indicado el acceso en memoria, pero para cambiarlo por el acceso a MongoDB hay que indicar @ParadigmaApplication(dataAccessMode = DataAccessMode.MONGO).

MicroS2 code4

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

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

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', 'mover')

Para autenticarse tan solo hay que hacer login sobre la url http://localhost:8080/api/v1/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.

Analizamos a fondo Microservicios con Spring Boot en 4 entregas:

Cuéntanos qué te parece.

Enviar.

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.