Capítulo 1: Spring Initializr
Introducción
Spring Initializr es un generador de proyectos web que permite crear rápidamente un proyecto Spring Boot con las dependencias y la configuración básica necesarias. Es el punto de partida recomendado para cualquier nuevo proyecto Spring Boot.
Objetivos del Capítulo
Al final de este capítulo, usted será capaz de:
- Utilizar Spring Initializr para crear proyectos Spring Boot
- Comprender las diferentes opciones de configuración
- Elegir las dependencias adecuadas para su proyecto
- Generar e importar un proyecto en su IDE
¿Qué es Spring Initializr?
Definición
Spring Initializr es una herramienta de bootstrap que genera la estructura básica de un proyecto Spring Boot. Esta:
- Crea la estructura de directorios Maven o Gradle
- Genera el archivo
pom.xmlobuild.gradlecon las dependencias - Añade la clase principal con
@SpringBootApplication - Configura los archivos de recursos básicos
Acceso a Spring Initializr
Existen varias formas de acceder a Spring Initializr:
- Interfaz Web: https://start.spring.io/
- IDE integrado: IntelliJ IDEA, VS Code con extensiones de Spring
- Spring CLI: Línea de comandos
- API REST: Para automatización
Interfaz Web de Spring Initializr
URL de Acceso
https://start.spring.io/
Secciones Principales
La interfaz está dividida en varias secciones:
Configuración del Proyecto
1. Project Type (Tipo de Proyecto)
Opciones disponibles:
| Tipo | Descripción | Uso |
|---|---|---|
| Maven | Herramienta de build XML | Recomendado para principiantes, muy documentado |
| Gradle | Herramienta de build Groovy/Kotlin DSL | Más moderno, más rápido, sintaxis concisa |
Recomendación: Maven para este curso (más estándar en la industria Java)
2. Language (Lenguaje)
Opciones disponibles:
| Lenguaje | Descripción | Nivel |
|---|---|---|
| Java | Lenguaje principal de Spring | Recomendado |
| Kotlin | Lenguaje moderno de JetBrains | Avanzado |
| Groovy | Lenguaje dinámico | Menos común |
Recomendación: Java (lenguaje de este curso)
3. Spring Boot Version
Formato de versión: X.Y.Z
- X: Versión mayor (cambios importantes)
- Y: Versión menor (nuevas funcionalidades)
- Z: Versión patch (correcciones de errores)
Ejemplo:
3.2.0
Tipos de versiones:
| Tipo | Sufijo | Significado | Uso |
|---|---|---|---|
| Release | Ninguno | Versión estable | Producción |
| Snapshot | -SNAPSHOT | Versión en desarrollo | Solo desarrollo |
| Milestone | -M1, -M2 | Versión beta | Pruebas |
| Release Candidate | -RC1 | Candidato a release | Pruebas finales |
Recomendación: Siempre elegir la última versión estable (sin sufijo)
Metadatos del Proyecto
Estructura de los Metadatos
1. Group
Definición: Identificador de la organización o del equipo (convención Maven)
Formato: Nombre de dominio invertido
Ejemplos:
com.example # Ejemplo genérico
com.inskillflow # Organización inskillflow
org.springframework # Spring Framework
Convención: Utilice su dominio invertido o com.example para los ejercicios
2. Artifact
Definición: Identificador único del proyecto
Formato: Letras minúsculas, guiones para los espacios
Ejemplos:
greeting-app
user-management-service
e-commerce-backend
Convención: Nombre descriptivo en kebab-case
3. Name
Definición: Nombre mostrado del proyecto
Formato: Nombre legible para humanos
Ejemplos:
Greeting Application
User Management Service
E-Commerce Backend
4. Description
Definición: Descripción corta del proyecto
Ejemplo:
Aplicación Spring Boot para gestionar saludos
5. Package Name
Definición: Paquete Java raíz del proyecto
Formato: Generado automáticamente: {group}.\{artifact\}
Ejemplo:
com.example.greeting
Estructura resultante:
src/main/java/com/example/greeting/
├── GreetingApplication.java
├── controller/
├── service/
└── model/
6. Packaging
Opciones disponibles:
| Tipo | Descripción | Uso |
|---|---|---|
| JAR | Java Archive (standalone) | Aplicaciones Spring Boot con servidor embebido |
| WAR | Web Archive | Despliegue en servidor externo (Tomcat, etc.) |
Recomendación: JAR (Spring Boot incluye su propio servidor)
Diferencia:
7. Java Version
Versiones soportadas por Spring Boot 3.x:
| Versión | Soporte | Recomendación |
|---|---|---|
| Java 17 | LTS | Recomendado |
| Java 21 | LTS | Muy reciente |
| Java 11 | Antigua LTS | No soportado por Spring Boot 3.x |
Nota importante: Spring Boot 3.x requiere mínimo Java 17
Gestión de Dependencias
¿Qué es una Dependencia?
Una dependencia (o dependency) es una biblioteca externa que su proyecto utiliza.
Starters Spring Boot
Spring Boot utiliza el concepto de "starters" - dependencias agrupadas.
Formato de un starter:
spring-boot-starter-{tecnología}
Categorías de Dependencias
1. Web
| Starter | Descripción | Uso |
|---|---|---|
| Spring Web | REST APIs, Spring MVC | Aplicaciones web REST |
| Spring Reactive Web | WebFlux (reactivo) | Aplicaciones altamente escalables |
2. SQL (Bases de datos relacionales)
| Starter | Descripción |
|---|---|
| Spring Data JPA | ORM con Hibernate |
| JDBC API | Acceso SQL de bajo nivel |
| MyBatis Framework | Mapping SQL/Java |
3. NoSQL
| Starter | Descripción |
|---|---|
| Spring Data MongoDB | Base de datos de documentos |
| Spring Data Redis | Caché en memoria |
| Spring Data Elasticsearch | Búsqueda full-text |
4. Seguridad
| Starter | Descripción |
|---|---|
| Spring Security | Autenticación y autorización |
| OAuth2 Client | Login social (Google, Facebook) |
| OAuth2 Resource Server | API protegida |
5. SQL Drivers
| Driver | Base de datos |
|---|---|
| PostgreSQL Driver | PostgreSQL |
| MySQL Driver | MySQL/MariaDB |
| H2 Database | Base en memoria (pruebas) |
| Oracle Driver | Oracle Database |
6. I/O
| Starter | Descripción |
|---|---|
| Validation | Validación de datos (@Valid) |
| Spring Web Services | SOAP Web Services |
| Spring for Apache Kafka | Mensajería Kafka |
7. Developer Tools
| Tool | Descripción | Uso |
|---|---|---|
| Spring Boot DevTools | Recarga automática | Desarrollo |
| Lombok | Reducción de código boilerplate | Productividad |
| Spring Configuration Processor | Autocompletado de configuraciones | Desarrollo |
Dependencias para un Proyecto REST Simple
Para una aplicación REST básica, elija:
✅ Spring Web
✅ Spring Boot DevTools
Dependencias para una Aplicación Completa
Para una aplicación con base de datos:
✅ Spring Web
✅ Spring Data JPA
✅ PostgreSQL Driver (u otro)
✅ Validation
✅ Spring Boot DevTools
✅ Lombok (opcional)
Generación y Descarga
Opciones de Generación
Botones disponibles:
-
EXPLORE (Ctrl + Space)
- Previsualizar la estructura del proyecto
- Ver el contenido de
pom.xml - Verificar los archivos generados
-
SHARE
- Generar un enlace compartible
- Compartir la configuración con el equipo
-
GENERATE (Ctrl + Enter)
- Descargar el proyecto en ZIP
- Listo para descomprimir e importar
Estructura del ZIP Generado
greeting-app.zip
└── greeting/
├── .mvn/ # Wrapper Maven
├── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── com/example/greeting/
│ │ │ └── GreetingApplication.java
│ │ └── resources/
│ │ ├── static/ # Archivos estáticos (CSS, JS, imágenes)
│ │ ├── templates/ # Plantillas (Thymeleaf)
│ │ └── application.properties
│ └── test/
│ └── java/
│ └── com/example/greeting/
│ └── GreetingApplicationTests.java
├── .gitignore
├── mvnw # Maven wrapper (Unix)
├── mvnw.cmd # Maven wrapper (Windows)
├── pom.xml # Configuración Maven
└── HELP.md
Importación en un IDE
Opción 1: Visual Studio Code
Pasos:
- Descomprimir el ZIP
- VS Code → File → Open Folder
- Seleccionar la carpeta
greeting - Esperar la importación automática de Maven
- Extensiones requeridas:
- Extension Pack for Java
- Spring Boot Extension Pack
Opción 2: IntelliJ IDEA
Pasos:
- Descomprimir el ZIP
- IntelliJ → File → Open
- Seleccionar la carpeta
greeting - IntelliJ detecta automáticamente el proyecto Maven
- Esperar la indexación
Opción 3: Eclipse/Spring Tool Suite (STS)
Pasos:
- Descomprimir el ZIP
- Eclipse → File → Import
- Maven → Existing Maven Projects
- Seleccionar la carpeta
greeting - Finish
Alternativas a la Interfaz Web
1. Spring Initializr en VS Code
Instalación:
- Extensión: Spring Initializr Java Support
Uso:
- Ctrl + Shift + P
- Escribir: "Spring Initializr: Create a Maven Project"
- Seguir los prompts
2. Spring CLI
Instalación:
# macOS
brew install spring-boot
# Linux/Windows
# Descargar desde: https://docs.spring.io/spring-boot/docs/current/reference/html/getting-started.html#getting-started-installing-the-cli
Uso:
spring init \
--dependencies=web,data-jpa,postgresql \
--name=greeting \
--group-id=com.example \
--artifact-id=greeting \
greeting-app
3. API REST de Spring Initializr
URL base:
https://start.spring.io
Ejemplo con curl:
curl https://start.spring.io/starter.zip \
-d dependencies=web,data-jpa \
-d name=greeting \
-d groupId=com.example \
-d artifactId=greeting \
-o greeting.zip
Ejercicios Prácticos
Ejercicio 1: Crear un Proyecto Simple
Objetivo: Crear un proyecto REST simple
Instrucciones:
- Vaya a https://start.spring.io/
- Configure:
- Tipo: Maven
- Java: 17
- Group:
com.example - Artifact:
hello-rest
- Añada: Spring Web
- Genere y descargue
- Importe en VS Code
Ejercicio 2: Crear un Proyecto con Base de Datos
Objetivo: Crear un proyecto con JPA
Instrucciones:
- Vaya a https://start.spring.io/
- Configure:
- Tipo: Maven
- Java: 17
- Group:
com.example - Artifact:
user-manager
- Añada:
- Spring Web
- Spring Data JPA
- PostgreSQL Driver
- Validation
- Genere y explore el
pom.xml
Ejercicio 3: Analizar un pom.xml
Objetivo: Comprender las dependencias generadas
Instrucciones:
- Genere un proyecto con Spring Web
- Abra el
pom.xml - Identifique:
- El parent Spring Boot
- El starter web
- El plugin Maven Spring Boot
- Liste todas las dependencias transitivas
Preguntas de Revisión
-
¿Qué es Spring Initializr?
-
¿Cuál es la diferencia entre Maven y Gradle?
-
¿Qué significa "starter" en Spring Boot?
-
¿Cuál es la convención para el Group ID?
-
¿Por qué elegir JAR en lugar de WAR para Spring Boot?
-
¿Cuál es la versión mínima de Java para Spring Boot 3.x?
-
¿Para qué sirve Spring Boot DevTools?
-
¿Qué dependencia es necesaria para crear REST APIs?
Resumen del Capítulo
Puntos Clave
- Spring Initializr genera rápidamente proyectos Spring Boot
- Accesible vía web, IDE, CLI o API
- Configuración en 3 secciones: Proyecto, Metadatos, Dependencias
- Los "starters" agrupan dependencias coherentes
- JAR es el empaquetado recomendado para Spring Boot
- Java 17+ es requerido para Spring Boot 3.x
Buenas Prácticas
- Utilizar versiones estables de Spring Boot
- Elegir solo las dependencias necesarias
- Seguir las convenciones de nombres de Maven
- Utilizar DevTools en desarrollo
- Versionar el código desde la creación
Próximos Pasos
En el siguiente capítulo, exploraremos en detalle:
Capítulo 2: Estructura de un Proyecto Spring Boot
- Organización de los paquetes
- Rol de cada archivo
- Convenciones de nombres
- Arquitectura en capas