Spring Boot

SpringBoot

Tutorial SpringBoot: Spring Boot Starters

Spring Boot starters: configuración y ejemplos. Aprende a configurar y usar starters en Spring Boot con ejemplos prácticos y detallados.

Introducción

Un aspecto central de Spring Boot es el concepto de "Starter".

Los starters de Spring Boot son un conjunto de dependencias de conveniencia que simplifican la configuración de Maven o Gradle. Son una forma de agrupar dependencias comunes, para que los desarrolladores no tengan que buscar y especificar las versiones de las dependencias manualmente.

Por ejemplo, si una aplicación necesita hacer uso de Spring MVC para la creación de una aplicación web y JPA para la persistencia de datos, en lugar de agregar varias dependencias para cada uno de estos módulos y sus dependencias relacionadas, el desarrollador puede simplemente agregar los starters spring-boot-starter-web y spring-boot-starter-data-jpa respectivamente.

Los starters incluyen una serie de dependencias que son útiles para el desarrollo en un área específica, y las versiones de estas dependencias están administradas por el equipo de Spring, por lo que los desarrolladores pueden estar seguros de que las versiones de sus dependencias son compatibles entre sí y con Spring Boot.

A continuación se exploran algunos de los starters más utilizados. Ver lista completa aquí.

Web starter

El Starter de Spring Boot para aplicaciones web, denominado spring-boot-starter-web, es una de las dependencias más utilizadas en la creación de aplicaciones con Spring Boot.

Este starter incluye todas las dependencias que son necesarias para crear una aplicación web:

spring-web: proporciona componentes básicos de la web como RestTemplate para la comunicación REST, así como las clases utilitarias para la manipulación de la web.

spring-webmvc: incluye soporte para la creación de aplicaciones web utilizando el patrón Model-View-Controller (MVC) de Spring.

tomcat-embed-core, tomcat-embed-el, y tomcat-embed-websocket: proporcionan un servidor Tomcat embebido para que tu aplicación pueda correr como una aplicación independiente.

spring-boot-starter-json: ofrece soporte para codificar y decodificar JSON.

spring-boot-starter-tomcat: configura Tomcat como el servidor web por defecto.

Ejemplo de uso

A continuación se presenta un ejemplo básico de una aplicación web creada utilizando spring-boot-starter-web.

Para comenzar, agregamos la dependencia al pom.xml de Maven en la sección <dependencies>:

  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
  </dependency>

Luego, creamos una clase de controlador simple:

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloWorldController {
  @RequestMapping("/")
  public String index() {
    return "¡Hola, Mundo!";
  }
}

Al iniciar la aplicación desde la clase principal, el endpoint / estará disponible y devolverá el mensaje "¡Hola, Mundo!".

Test starter

El starter de Spring Boot para pruebas, denominado spring-boot-starter-test, es una dependencia que proporciona una serie de bibliotecas útiles para escribir pruebas en las aplicaciones Spring Boot. 

Se añade automáticamente por defecto cuando se crea un nuevo proyecto de Spring Boot.

El starter spring-boot-starter-test incluye varias dependencias importantes que facilitan la escritura de pruebas en una aplicación:

JUnit: el framework de testing más popular para Java.

Spring Test & Spring Boot Test: proporciona integración de pruebas para proyectos Spring Boot. Spring Boot Test proporciona @SpringBootTest para simplificar las pruebas de aplicaciones de arranque de Spring.

AssertJ: una biblioteca de afirmaciones para escribir aserciones en las pruebas de manera fácil y legible.

Hamcrest: una biblioteca de "matcher" que también facilita la escritura de aserciones en las pruebas.

Mockito: un marco popular para hacer mock de objetos en pruebas unitarias.

JSONassert: una biblioteca para escribir aserciones para objetos JSON.

JsonPath: una biblioteca para extraer datos de JSON usando expresiones de ruta de JSON.

Ejemplo de uso

A continuación, se muestra un ejemplo de cómo utilizar algunas de estas bibliotecas en una prueba.

Primero, agregamos la dependencia al archivo pom.xml:

  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
  </dependency>

Luego, creamos un caso de prueba simple:

import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import static org.assertj.core.api.Assertions.assertThat;

@SpringBootTest
public class MiAplicacionTests {

  @Test
  public void cuandoPreguntaPorContexto_EntoncesDebeExistir() {
    assertThat(true).isTrue();
  }
}

En este caso de prueba, estamos utilizando @SpringBootTest para cargar el contexto de la aplicación y ejecutar nuestra prueba en ese contexto. Luego, utilizamos la biblioteca AssertJ para comprobar que la condición es verdadera.

Data JPA starter

El Starter de Spring Boot para el acceso a datos mediante JPA, denominado spring-boot-starter-data-jpa, es una dependencia que facilita la creación de aplicaciones que necesitan implementar la persistencia de datos en bases de datos SQL utilizando el estándar Java Persistence API (JPA).

Dependencias incluidas

El starter spring-boot-starter-data-jpa incluye varias dependencias importantes:

spring-data-jpa: simplifica la implementación de capas de acceso a datos. Proporciona repositorios CRUD y especificaciones para generar consultas a la base de datos.

hibernate-core: la implementación más popular de JPA. Hibernate es el motor por defecto en Spring Boot para la persistencia de datos.

spring-orm: Proporciona una forma más fácil de crear aplicaciones basadas en JDBC.

spring-jdbc: proporciona una capa de abstracción para simplificar el uso de JDBC para el acceso a la base de datos.

spring-tx: Proporciona capacidades para trabajar con transacciones.

Estas dependencias y otras se incluyen automáticamente al agregar spring-boot-starter-data-jpa a tus dependencias.

  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
  </dependency>

A mayores, será necesario definir un driver de base de datos, por ejemplo H2, una base de datos embebida muy popular para desarrollo:

    <dependency>
        <groupId>com.h2database</groupId>
        <artifactId>h2</artifactId>
        <scope>runtime</scope>
    </dependency>

Por otro lado, en entornos de producción es más aconsejable utilizar bases de datos como MySQL o PostgreSQL:

    <dependency>
      <groupId>com.mysql</groupId>
      <artifactId>mysql-connector-j</artifactId>
      <scope>runtime</scope>
    </dependency>

Para crear una conexión desde Spring Boot a la base de datos será necesario configurar las propiedades en el archivo application.properties.

Security starter

spring-boot-starter-security

El spring-boot-starter-security es un starter de Spring Boot diseñado para integrar rápidamente Spring Security en cualquier aplicación Spring Boot. Este starter agrega automáticamente las configuraciones y dependencias necesarias para implementar aspectos cruciales de la seguridad web y de método en una aplicación. A continuación, se destacan las funcionalidades clave proporcionadas por este starter:

  • Autoconfiguración de Seguridad: Configura automáticamente la seguridad basada en Spring Security, estableciendo una configuración básica que incluye la autenticación y la autorización, protección contra ataques comunes como CSRF, y la configuración de CORS.
  • Configuración Simplificada: Permite personalizar fácilmente la seguridad según los requisitos específicos del proyecto, como la definición de reglas de acceso por roles, la configuración de puntos de entrada de autenticación personalizados, y más.
  • Integración con otros módulos de Spring: Trabaja en conjunto con otros starters de Spring Boot, como JDBC o JPA, para gestionar la seguridad en el acceso a datos.

spring-security-test

El spring-security-test es una extensión de Spring Security que facilita la prueba de componentes de seguridad en aplicaciones que utilizan Spring Security. Este starter proporciona herramientas y anotaciones específicas que permiten simular el contexto de seguridad durante las pruebas unitarias y de integración. Las principales características incluyen:

  • Anotaciones para Pruebas: Ofrece anotaciones como @WithMockUser, @WithUserDetails, entre otras, que permiten establecer un contexto de seguridad simulado para las pruebas, emulando diferentes usuarios y roles.
  • Soporte para MockMvc: Integra utilidades para usar MockMvc en pruebas de controladores web, permitiendo verificar comportamientos de seguridad como el acceso autorizado y no autorizado a endpoints.
  • Configuración de Contexto de Seguridad: Permite manipular el SecurityContext en las pruebas para probar métodos seguros y gestionar cómo se trata la autenticación y autorización en tiempo de pruebas.

La combinación de estos dos starters facilita no solo la implementación de características de seguridad robustas sino también la verificación y el aseguramiento de la calidad de dichas características a través de pruebas exhaustivas y automatizadas. Esto es esencial para el desarrollo de aplicaciones que no solo cumplen con los requisitos funcionales sino que también aseguran la protección de los datos y la interacción de los usuarios.

Mail starter

El starter de Spring Boot para el envío de correos electrónicos, denominado spring-boot-starter-mail, es una dependencia que proporciona las bibliotecas necesarias para el envío de correo electrónico, así como la autoconfiguración necesaria para la configuración de la infraestructura de envío de correo electrónico.

El starter spring-boot-starter-mail incluye varias dependencias importantes:

spring-context-support: Esta dependencia proporciona soporte para la integración del correo electrónico.

spring-boot-starter: La dependencia principal de Spring Boot que incluye autoconfiguración, configuración de propiedades, entre otras características.

javax.mail: Proporciona las API necesarias para el envío de correo electrónico.

Estas dependencias, junto con otras, se incluyen automáticamente cuando se agrega spring-boot-starter-mail a las dependencias de tu proyecto.

Ejemplo de uso

A continuación, se muestra un ejemplo de cómo utilizar spring-boot-starter-mail para enviar un correo electrónico simple.

Primero, agregamos la dependencia al archivo pom.xml:

  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-mail</artifactId>
  </dependency>

Luego, configuramos las propiedades de correo en el archivo application.properties:

spring.mail.host=smtp.gmail.com
spring.mail.port=587
spring.mail.username=tu-correo@gmail.com
spring.mail.password=tu-contraseña
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=true

A continuación, creamos un servicio para enviar correos electrónicos:

import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.stereotype.Service;

@Service
public class EmailService {
    private final JavaMailSender mailSender;

    public EmailService(JavaMailSender mailSender) {
        this.mailSender = mailSender;
    }

    public void sendEmail(String to, String subject, String content) {
        SimpleMailMessage message = new SimpleMailMessage();
        message.setFrom("tu-correo@gmail.com");
        message.setTo(to);
        message.setSubject(subject);
        message.setText(content);
        mailSender.send(message);
    }
}

Ahora, simplemente podemos inyectar EmailService donde necesitemos y utilizar el método sendEmail para enviar un correo electrónico.

En resumen, spring-boot-starter-mail proporciona un conjunto completo de dependencias para el envío de correos electrónicos, y realiza la autoconfiguración necesaria basándose en las propiedades proporcionadas. Esto permite enviar correos electrónicos de manera sencilla y eficiente en una aplicación Spring Boot.

Otros Starters

Además de los starters ya mencionados, Spring Boot proporciona una variedad de otros starters que pueden ser útiles en diferentes contextos de desarrollo de aplicaciones. 

A continuación se presentan algunos de los starters más comúnmente utilizados:

spring-boot-starter-data-rest: Este starter se utiliza para exponer rápidamente los repositorios JPA como servicios REST. Incorpora automáticamente la biblioteca spring-data-rest-webmvc y otras dependencias necesarias, lo que facilita la creación de una API RESTful en torno a las entidades JPA.

spring-boot-starter-security: Este starter agrega dependencias para Spring Security, lo que proporciona un conjunto de anotaciones y otras utilidades para agregar seguridad a las aplicaciones Spring. Permite a los desarrolladores agregar autenticación y autorización, entre otras características de seguridad, a sus aplicaciones.

spring-boot-starter-actuator: Este starter proporciona dependencias para Spring Boot Actuator, que ofrece características de gestión de la aplicación y producción, como métricas de salud, auditoría, recopilación de métricas y HTTP tracing.

spring-boot-starter-thymeleaf: Este starter se utiliza para aplicaciones que utilizan Thymeleaf para la representación de vistas. Thymeleaf es un motor de plantillas para aplicaciones web en Java que permite la creación de HTML dinámico.

spring-boot-starter-amqp: Este starter se utiliza para aplicaciones que necesitan la funcionalidad de mensajería AMQP, como RabbitMQ. Proporciona las dependencias necesarias para conectar e interactuar con un servidor de mensajes AMQP.

spring-boot-starter-webflux: Este starter se utiliza para construir aplicaciones web y RESTful reactivas utilizando el módulo Spring WebFlux. Es útil para aplicaciones que requieren un modelo de programación no bloqueante y que necesitan manejar un gran número de eventos simultáneamente.

Certifícate en SpringBoot con CertiDevs PLUS

Ejercicios de esta lección Spring Boot Starters

Evalúa tus conocimientos de esta lección Spring Boot Starters con nuestros retos de programación de tipo Test, Puzzle, Código y Proyecto con VSCode, guiados por IA.

Web y Test Starters

Spring Boot
Puzzle

Entidades JPA

Spring Boot
Test

Repositorios reactivos

Spring Boot
Test

Inserción de datos

Spring Boot
Test

Borrar datos de base de datos

Spring Boot
Test

Controladores Spring MVC

Spring Boot
Código

Backend API REST con Spring Boot

Spring Boot
Proyecto

Operadores Reactivos

Spring Boot
Puzzle

Controladores Spring REST

Spring Boot
Código

Uso de Spring con Thymeleaf

Spring Boot
Puzzle

Crear entidades JPA

Spring Boot
Código

Registro de usuarios

Spring Boot
Test

CRUD y JPA Repository

Spring Boot
Puzzle

Anotaciones y mapeo en JPA

Spring Boot
Puzzle

Integración con Vue

Spring Boot
Test

Consultas JPQL con @Query en Spring Data JPA

Spring Boot
Test

Open API y cómo agregarlo en Spring Boot

Spring Boot
Puzzle

Uso de Controladores REST

Spring Boot
Puzzle

API Specification

Spring Boot
Puzzle

Inyección de dependencias

Spring Boot
Test

Introducción a Spring Boot

Spring Boot
Test

Consultas JPQL con @Query en Spring Data JPA

Spring Boot
Puzzle

API Query By Example (QBE)

Spring Boot
Puzzle

Inyección de dependencias

Spring Boot
Código

Vista en Spring MVC con Thymeleaf

Spring Boot
Test

Servicios en Spring

Spring Boot
Código

Configuración de Vue

Spring Boot
Puzzle

Integración con Angular

Spring Boot
Test

API Query By Example (QBE)

Spring Boot
Test

API Specification

Spring Boot
Test

Controladores MVC

Spring Boot
Test

Métodos find en repositorios

Spring Boot
Test

Repositorios Spring Data

Spring Boot
Test

Inyección de dependencias

Spring Boot
Puzzle

Data JPA y Mail Starters

Spring Boot
Test

Configuración de Angular

Spring Boot
Puzzle

Controladores Spring REST

Spring Boot
Test

Configuración de Controladores MVC

Spring Boot
Puzzle

Asociaciones de entidades JPA

Spring Boot
Código

Actualizar datos de base de datos

Spring Boot
Test

Identificadores y relaciones JPA

Spring Boot
Puzzle

Verificar token JWT en peticiones

Spring Boot
Test

Login de usuarios

Spring Boot
Test

Integración con React

Spring Boot
Test

Configuración de React

Spring Boot
Puzzle

Asociaciones en JPA

Spring Boot
Test

Consultas JPQL

Spring Boot
Código

Todas las lecciones de SpringBoot

Accede a todas las lecciones de SpringBoot y aprende con ejemplos prácticos de código y ejercicios de programación con IDE web sin instalar nada.

Introducción A Spring Boot

Spring Boot

Introducción Y Entorno

Spring Boot Starters

Spring Boot

Introducción Y Entorno

Inyección De Dependencias

Spring Boot

Introducción Y Entorno

Controladores Spring Mvc

Spring Boot

Spring Web

Vista En Spring Mvc Con Thymeleaf

Spring Boot

Spring Web

Controladores Spring Rest

Spring Boot

Spring Web

Open Api Y Cómo Agregarlo En Spring Boot

Spring Boot

Spring Web

Servicios En Spring

Spring Boot

Spring Web

Crear Entidades Jpa

Spring Boot

Persistencia Con Spring Data

Asociaciones De Entidades Jpa

Spring Boot

Persistencia Con Spring Data

Repositorios Spring Data

Spring Boot

Persistencia Con Spring Data

Métodos Find En Repositorios

Spring Boot

Persistencia Con Spring Data

Inserción De Datos

Spring Boot

Persistencia Con Spring Data

Actualizar Datos De Base De Datos

Spring Boot

Persistencia Con Spring Data

Borrar Datos De Base De Datos

Spring Boot

Persistencia Con Spring Data

Consultas Jpql Con @Query En Spring Data Jpa

Spring Boot

Persistencia Con Spring Data

Api Query By Example (Qbe)

Spring Boot

Persistencia Con Spring Data

Repositorios Reactivos

Spring Boot

Persistencia Con Spring Data

Api Specification

Spring Boot

Persistencia Con Spring Data

Integración Con React

Spring Boot

Integración Frontend

Integración Con Vue

Spring Boot

Integración Frontend

Integración Con Angular

Spring Boot

Integración Frontend

Registro De Usuarios

Spring Boot

Seguridad Con Spring Security

Login De Usuarios

Spring Boot

Seguridad Con Spring Security

Verificar Token Jwt En Peticiones

Spring Boot

Seguridad Con Spring Security

En esta lección

Objetivos de aprendizaje de esta lección

  1. Comprender qué son los Spring Boot Starters y cómo simplifican la configuración de una aplicación Spring Boot.
  2. Aprender a utilizar diferentes Starters como Web Starter, Test Starter, Data JPA Starter y Mail Starter en proyectos de Spring Boot.
  3. Ser capaz de seleccionar el Starter adecuado según las necesidades de un proyecto específico.
  4. Aprender a añadir y configurar Starters en el archivo de configuración del proyecto (pom.xml o build.gradle).
  5. Familiarizarse con la forma en que los Starters afectan a la aplicación y cómo se pueden personalizar.