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.
Aprende SpringBoot GRATIS y certifícateIntroducció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.
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.
API Query By Example (QBE)
Identificadores y relaciones JPA
Borrar datos de base de datos
Web y Test Starters
Métodos find en repositorios
Controladores Spring MVC
Inserción de datos
CRUD Customers Spring MVC + Spring Data JPA
Backend API REST con Spring Boot
Controladores Spring REST
Uso de Spring con Thymeleaf
API Specification
Registro de usuarios
Crear entidades JPA
Asociaciones en JPA
Asociaciones de entidades JPA
Integración con Vue
Consultas JPQL
Open API y cómo agregarlo en Spring Boot
Uso de Controladores REST
Repositorios reactivos
Inyección de dependencias
Introducción a Spring Boot
CRUD y JPA Repository
Inyección de dependencias
Vista en Spring MVC con Thymeleaf
Servicios en Spring
Operadores Reactivos
Configuración de Vue
Entidades JPA
Integración con Angular
API Specification
API Query By Example (QBE)
Controladores MVC
Anotaciones y mapeo en JPA
Consultas JPQL con @Query en Spring Data JPA
Repositorios Spring Data
Inyección de dependencias
Data JPA y Mail Starters
Configuración de Angular
Controladores Spring REST
Configuración de Controladores MVC
Consultas JPQL con @Query en Spring Data JPA
Actualizar datos de base de datos
Verificar token JWT en peticiones
Login de usuarios
Integración con React
Configuración de React
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
Introducción Y Entorno
Spring Boot Starters
Introducción Y Entorno
Inyección De Dependencias
Introducción Y Entorno
Controladores Spring Mvc
Spring Web
Vista En Spring Mvc Con Thymeleaf
Spring Web
Controladores Spring Rest
Spring Web
Open Api Y Cómo Agregarlo En Spring Boot
Spring Web
Servicios En Spring
Spring Web
Clientes Resttemplate Y Restclient
Spring Web
Rxjava En Spring Web
Spring Web
Crear Entidades Jpa
Persistencia Spring Data
Asociaciones De Entidades Jpa
Persistencia Spring Data
Repositorios Spring Data
Persistencia Spring Data
Métodos Find En Repositorios
Persistencia Spring Data
Inserción De Datos
Persistencia Spring Data
Actualizar Datos De Base De Datos
Persistencia Spring Data
Borrar Datos De Base De Datos
Persistencia Spring Data
Consultas Jpql Con @Query En Spring Data Jpa
Persistencia Spring Data
Api Query By Example (Qbe)
Persistencia Spring Data
Api Specification
Persistencia Spring Data
Repositorios Reactivos
Persistencia Spring Data
Introducción E Instalación De Apache Kafka
Mensajería Asíncrona
Crear Proyecto Con Apache Kafka
Mensajería Asíncrona
Creación De Producers
Mensajería Asíncrona
Creación De Consumers
Mensajería Asíncrona
Kafka Streams En Spring Boot
Mensajería Asíncrona
Introducción A Spring Webflux
Reactividad Webflux
Spring Data R2dbc
Reactividad Webflux
Controlador Rest Reactivo Basado En Anotaciones
Reactividad Webflux
Controlador Rest Reactivo Funcional
Reactividad Webflux
Operadores Reactivos Básicos
Reactividad Webflux
Operadores Reactivos Avanzados
Reactividad Webflux
Cliente Reactivo Webclient
Reactividad Webflux
Introducción A Spring Security
Seguridad Con Spring Security
Seguridad Basada En Formulario En Mvc Con Thymeleaf
Seguridad Con Spring Security
Registro De Usuarios
Seguridad Con Spring Security
Login De Usuarios
Seguridad Con Spring Security
Verificar Token Jwt En Peticiones
Seguridad Con Spring Security
Seguridad Jwt En Api Rest Spring Web
Seguridad Con Spring Security
Seguridad Jwt En Api Rest Reactiva Spring Webflux
Seguridad Con Spring Security
Autenticación Y Autorización Con Anotaciones
Seguridad Con Spring Security
Testing Unitario De Componentes Y Servicios
Testing Con Spring Test
Testing De Repositorios Spring Data Jpa
Testing Con Spring Test
Testing Controladores Spring Mvc Con Thymeleaf
Testing Con Spring Test
Testing Controladores Rest Con Json
Testing Con Spring Test
Testing De Aplicaciones Reactivas Webflux
Testing Con Spring Test
Testing De Seguridad Spring Security
Testing Con Spring Test
Testing Con Apache Kafka
Testing Con Spring Test
Integración Con Angular
Integración Frontend
Integración Con React
Integración Frontend
Integración Con Vue
Integración Frontend
En esta lección
Objetivos de aprendizaje de esta lección
- Comprender qué son los Spring Boot Starters y cómo simplifican la configuración de una aplicación Spring Boot.
- Aprender a utilizar diferentes Starters como Web Starter, Test Starter, Data JPA Starter y Mail Starter en proyectos de Spring Boot.
- Ser capaz de seleccionar el Starter adecuado según las necesidades de un proyecto específico.
- Aprender a añadir y configurar Starters en el archivo de configuración del proyecto (pom.xml o build.gradle).
- Familiarizarse con la forma en que los Starters afectan a la aplicación y cómo se pueden personalizar.