Saltar a contenido

1. Configuración Inicial del Proyecto Spring Boot

🎯 Objetivos

En esta sección aprenderás a: - Crear un proyecto Spring Boot desde cero - Configurar las dependencias necesarias - Entender la estructura básica del proyecto - Configurar el archivo principal de la aplicación

📋 Prerrequisitos

  • Java 21 instalado
  • Maven 3.6+ instalado
  • IDE de tu preferencia (IntelliJ IDEA, Eclipse, VS Code)
  • Conocimientos básicos de Java

🚀 Creación del Proyecto

Opción 1: Spring Initializr (Recomendado)

  1. Ve a Spring Initializr
  2. Configura los siguientes parámetros:
  3. Project: Maven
  4. Language: Java
  5. Spring Boot: 3.5.4
  6. Group: com.example
  7. Artifact: pib2
  8. Name: pib2
  9. Description: Demo project for Spring Boot
  10. Package name: com.example.pib2
  11. Packaging: Jar
  12. Java: 21

  13. Agrega las siguientes dependencias:

  14. Spring Web
  15. Spring Data JPA
  16. PostgreSQL Driver
  17. Spring Boot DevTools
  18. Lombok
  19. Validation
  20. Spring Boot Actuator
  21. H2 Database (para testing)

  22. Haz clic en "Generate" y descarga el proyecto

  23. Extrae el archivo ZIP en tu directorio de trabajo

Opción 2: Crear manualmente

Si prefieres crear el proyecto manualmente, sigue estos pasos:

  1. Crea la estructura de directorios:
    pi_backend2/
    ├── src/
    │   ├── main/
    │   │   ├── java/
    │   │   │   └── com/
    │   │   │       └── example/
    │   │   │           └── pib2/
    │   │   └── resources/
    │   └── test/
    │       └── java/
    ├── pom.xml
    └── README.md
    

📄 Configuración del archivo pom.xml

El archivo pom.xml es el corazón de cualquier proyecto Maven. Define las dependencias, plugins y configuraciones necesarias.

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" 
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
         https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <!-- Configuración del proyecto padre -->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>3.5.4</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <!-- Información del proyecto -->
    <groupId>com.example</groupId>
    <artifactId>pib2</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>pib2</name>
    <description>Demo project for Spring Boot</description>

    <!-- Propiedades del proyecto -->
    <properties>
        <java.version>21</java.version>
    </properties>

    <!-- Dependencias -->
    <dependencies>
        <!-- Spring Boot Starter Web: Para crear APIs REST -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <!-- Spring Boot Starter Data JPA: Para persistencia de datos -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>

        <!-- Spring Boot Starter Validation: Para validación de datos -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-validation</artifactId>
        </dependency>

        <!-- PostgreSQL Driver: Para conectar con PostgreSQL -->
        <dependency>
            <groupId>org.postgresql</groupId>
            <artifactId>postgresql</artifactId>
            <scope>runtime</scope>
        </dependency>

        <!-- H2 Database: Base de datos en memoria para testing -->
        <dependency>
            <groupId>com.h2database</groupId>
            <artifactId>h2</artifactId>
            <scope>runtime</scope>
        </dependency>

        <!-- Spring Boot DevTools: Herramientas de desarrollo -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>

        <!-- Lombok: Para reducir código boilerplate -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>

        <!-- Spring Boot Actuator: Para monitoreo y métricas -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>

        <!-- Spring Boot Starter Test: Para testing -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <!-- Plugins de construcción -->
    <build>
        <plugins>
            <!-- Plugin del compilador Maven -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <annotationProcessorPaths>
                        <path>
                            <groupId>org.projectlombok</groupId>
                            <artifactId>lombok</artifactId>
                        </path>
                    </annotationProcessorPaths>
                </configuration>
            </plugin>

            <!-- Plugin de Spring Boot Maven -->
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <excludes>
                        <exclude>
                            <groupId>org.projectlombok</groupId>
                            <artifactId>lombok</artifactId>
                        </exclude>
                    </excludes>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

🔍 Explicación de las Dependencias

Dependencias Core de Spring Boot

  1. spring-boot-starter-web
  2. Incluye Spring MVC, Tomcat embebido, y Jackson
  3. Permite crear APIs REST
  4. Maneja peticiones HTTP

  5. spring-boot-starter-data-jpa

  6. Incluye Hibernate, Spring Data JPA
  7. Facilita el trabajo con bases de datos
  8. Proporciona repositorios automáticos

  9. spring-boot-starter-validation

  10. Incluye Bean Validation (JSR-303)
  11. Permite validar datos de entrada
  12. Integración con Spring MVC

Dependencias de Base de Datos

  1. postgresql
  2. Driver JDBC para PostgreSQL
  3. Permite conectar con bases de datos PostgreSQL
  4. Scope runtime porque solo se necesita en ejecución

  5. h2

  6. Base de datos en memoria
  7. Útil para testing y desarrollo
  8. Scope runtime

Dependencias de Desarrollo

  1. spring-boot-devtools
  2. Reinicio automático de la aplicación
  3. LiveReload para el navegador
  4. Configuraciones adicionales para desarrollo

  5. lombok

  6. Reduce código boilerplate
  7. Genera automáticamente getters, setters, constructores
  8. Mejora la legibilidad del código

Dependencias de Monitoreo y Testing

  1. spring-boot-starter-actuator
  2. Endpoints de monitoreo (/health, /info, /metrics)
  3. Información sobre el estado de la aplicación
  4. Útil para producción

  5. spring-boot-starter-test

  6. Incluye JUnit, Mockito, AssertJ
  7. Framework completo para testing
  8. Scope test

📱 Clase Principal de la Aplicación

Crea el archivo src/main/java/com/example/pib2/Pib2Application.java:

package com.example.pib2;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class Pib2Application {

    public static void main(String[] args) {
        SpringApplication.run(Pib2Application.class, args);
    }
}

🔍 Explicación de la Clase Principal

  1. @SpringBootApplication
  2. Anotación compuesta que incluye:

    • @Configuration: Marca la clase como fuente de configuración
    • @EnableAutoConfiguration: Habilita la configuración automática
    • @ComponentScan: Escanea componentes en el paquete actual y subpaquetes
  3. SpringApplication.run()

  4. Inicia la aplicación Spring Boot
  5. Configura el contexto de Spring
  6. Inicia el servidor embebido (Tomcat por defecto)

🏗️ Estructura Final del Proyecto

Después de la configuración inicial, tu proyecto debería tener esta estructura:

pi_backend2/
├── src/
│   ├── main/
│   │   ├── java/
│   │   │   └── com/
│   │   │       └── example/
│   │   │           └── pib2/
│   │   │               └── Pib2Application.java
│   │   └── resources/
│   │       └── application.properties
│   └── test/
│       └── java/
│           └── com/
│               └── example/
│                   └── pib2/
│                       └── Pib2ApplicationTests.java
├── target/                    # Generado por Maven
├── .mvn/                     # Wrapper de Maven
├── mvnw                      # Script de Maven (Unix)
├── mvnw.cmd                  # Script de Maven (Windows)
├── pom.xml                   # Configuración de Maven
└── README.md                 # Documentación del proyecto

✅ Verificación de la Configuración

1. Compilar el proyecto

Ejecuta el siguiente comando en la raíz del proyecto:

./mvnw clean compile

En Windows:

.\mvnw.cmd clean compile

2. Ejecutar la aplicación

./mvnw spring-boot:run

En Windows:

.\mvnw.cmd spring-boot:run

3. Verificar que la aplicación esté funcionando

Si todo está configurado correctamente, deberías ver en la consola:

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::                (v3.5.4)

2024-08-30 00:00:00.000  INFO 12345 --- [           main] com.example.pib2.Pib2Application        : Starting Pib2Application
2024-08-30 00:00:00.000  INFO 12345 --- [           main] com.example.pib2.Pib2Application        : Started Pib2Application in 2.345 seconds

La aplicación estará disponible en: http://localhost:8080

🚨 Problemas Comunes y Soluciones

Error: "Java version not supported"

Solución: Verifica que tienes Java 21 instalado:

java -version

Error: "Maven not found"

Solución: Usa el wrapper de Maven incluido:

./mvnw clean compile

Error: "Port 8080 already in use"

Solución: Cambia el puerto en application.properties:

server.port=8081

📚 Conceptos Clave Aprendidos

  • Spring Boot: Framework que simplifica el desarrollo de aplicaciones Spring
  • Maven: Herramienta de gestión de dependencias y construcción
  • Starter Dependencies: Dependencias preconfiguradas que incluyen todo lo necesario
  • Auto-configuration: Configuración automática basada en las dependencias presentes
  • Embedded Server: Servidor web incluido en la aplicación (no necesitas instalar Tomcat)

🎯 Próximos Pasos

En la siguiente sección aprenderás a: - Configurar la conexión a la base de datos - Configurar JPA/Hibernate - Manejar variables de entorno - Configurar perfiles de Spring


← Volver al Índice | Siguiente: Configuración de Base de Datos →