Saltar al contenido principal

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.xml o build.gradle con 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:

  1. Interfaz Web: https://start.spring.io/
  2. IDE integrado: IntelliJ IDEA, VS Code con extensiones de Spring
  3. Spring CLI: Línea de comandos
  4. 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:

TipoDescripciónUso
MavenHerramienta de build XMLRecomendado para principiantes, muy documentado
GradleHerramienta de build Groovy/Kotlin DSLMá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:

LenguajeDescripciónNivel
JavaLenguaje principal de SpringRecomendado
KotlinLenguaje moderno de JetBrainsAvanzado
GroovyLenguaje dinámicoMenos 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:

TipoSufijoSignificadoUso
ReleaseNingunoVersión estableProducción
Snapshot-SNAPSHOTVersión en desarrolloSolo desarrollo
Milestone-M1, -M2Versión betaPruebas
Release Candidate-RC1Candidato a releasePruebas 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:

TipoDescripciónUso
JARJava Archive (standalone)Aplicaciones Spring Boot con servidor embebido
WARWeb ArchiveDespliegue 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ónSoporteRecomendación
Java 17LTSRecomendado
Java 21LTSMuy reciente
Java 11Antigua LTSNo 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​

StarterDescripciónUso
Spring WebREST APIs, Spring MVCAplicaciones web REST
Spring Reactive WebWebFlux (reactivo)Aplicaciones altamente escalables

2. SQL (Bases de datos relacionales)​

StarterDescripción
Spring Data JPAORM con Hibernate
JDBC APIAcceso SQL de bajo nivel
MyBatis FrameworkMapping SQL/Java

3. NoSQL​

StarterDescripción
Spring Data MongoDBBase de datos de documentos
Spring Data RedisCaché en memoria
Spring Data ElasticsearchBúsqueda full-text

4. Seguridad​

StarterDescripción
Spring SecurityAutenticación y autorización
OAuth2 ClientLogin social (Google, Facebook)
OAuth2 Resource ServerAPI protegida

5. SQL Drivers​

DriverBase de datos
PostgreSQL DriverPostgreSQL
MySQL DriverMySQL/MariaDB
H2 DatabaseBase en memoria (pruebas)
Oracle DriverOracle Database

6. I/O​

StarterDescripción
ValidationValidación de datos (@Valid)
Spring Web ServicesSOAP Web Services
Spring for Apache KafkaMensajería Kafka

7. Developer Tools​

ToolDescripciónUso
Spring Boot DevToolsRecarga automáticaDesarrollo
LombokReducción de código boilerplateProductividad
Spring Configuration ProcessorAutocompletado de configuracionesDesarrollo

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:

  1. EXPLORE (Ctrl + Space)

    • Previsualizar la estructura del proyecto
    • Ver el contenido de pom.xml
    • Verificar los archivos generados
  2. SHARE

    • Generar un enlace compartible
    • Compartir la configuración con el equipo
  3. 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:

  1. Descomprimir el ZIP
  2. VS Code → File → Open Folder
  3. Seleccionar la carpeta greeting
  4. Esperar la importación automática de Maven
  5. Extensiones requeridas:
    • Extension Pack for Java
    • Spring Boot Extension Pack

Opción 2: IntelliJ IDEA​

Pasos:

  1. Descomprimir el ZIP
  2. IntelliJ → File → Open
  3. Seleccionar la carpeta greeting
  4. IntelliJ detecta automáticamente el proyecto Maven
  5. Esperar la indexación

Opción 3: Eclipse/Spring Tool Suite (STS)​

Pasos:

  1. Descomprimir el ZIP
  2. Eclipse → File → Import
  3. Maven → Existing Maven Projects
  4. Seleccionar la carpeta greeting
  5. Finish

Alternativas a la Interfaz Web​

1. Spring Initializr en VS Code​

Instalación:

  • Extensión: Spring Initializr Java Support

Uso:

  1. Ctrl + Shift + P
  2. Escribir: "Spring Initializr: Create a Maven Project"
  3. 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:

  1. Vaya a https://start.spring.io/
  2. Configure:
    • Tipo: Maven
    • Java: 17
    • Group: com.example
    • Artifact: hello-rest
  3. Añada: Spring Web
  4. Genere y descargue
  5. Importe en VS Code

Ejercicio 2: Crear un Proyecto con Base de Datos​

Objetivo: Crear un proyecto con JPA

Instrucciones:

  1. Vaya a https://start.spring.io/
  2. Configure:
    • Tipo: Maven
    • Java: 17
    • Group: com.example
    • Artifact: user-manager
  3. Añada:
    • Spring Web
    • Spring Data JPA
    • PostgreSQL Driver
    • Validation
  4. Genere y explore el pom.xml

Ejercicio 3: Analizar un pom.xml​

Objetivo: Comprender las dependencias generadas

Instrucciones:

  1. Genere un proyecto con Spring Web
  2. Abra el pom.xml
  3. Identifique:
    • El parent Spring Boot
    • El starter web
    • El plugin Maven Spring Boot
  4. Liste todas las dependencias transitivas

Preguntas de Revisión​

  1. ¿Qué es Spring Initializr?

  2. ¿Cuál es la diferencia entre Maven y Gradle?

  3. ¿Qué significa "starter" en Spring Boot?

  4. ¿Cuál es la convención para el Group ID?

  5. ¿Por qué elegir JAR en lugar de WAR para Spring Boot?

  6. ¿Cuál es la versión mínima de Java para Spring Boot 3.x?

  7. ¿Para qué sirve Spring Boot DevTools?

  8. ¿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

Volver al Módulo 2