Saltar al contenido principal

🚀 Creación Proyecto Spring Boot

Guía paso a paso para crear un proyecto Spring Boot 3 con Kotlin y dependencias esenciales.

📋 Contexto​

Iniciar un proyecto Spring Boot requiere decisiones arquitectónicas desde el primer momento. Esta guía establece una base sólida con el stack tecnológico adecuado.

🎯 Objetivo​

Crear un proyecto Spring Boot funcional con configuración inicial, dependencias esenciales y estructura preparada para producción.

📦 Alcance​

Incluye:

  • Configuración inicial (Group, Artifact, JDK)
  • Selección de dependencias esenciales
  • Configuración YAML por perfiles
  • Estructura base del proyecto

Excluye:

  • Desarrollo de features específicas
  • Configuración de CI/CD

🏛️ Configuración Inicial​

Nueva Proyecto (start.spring.io)​

CampoValorDescripción
GeneradorSpring Boot (start.spring.io)Oficial de Spring
LenguajeKotlinConciso, null-safety
BuildGradle - Groovy/Kotlin DSLRecomendado Kotlin DSL
Groupcom.lgzarturoIdentidad del dominio
Artifactspringboot-courseNombre del proyecto
Packagecom.lgzarturo.springbootcoursePaquete base
JDK21LTS recomendado
PackagingJarEstándar Spring Boot

Estructura Generada​

springboot-course/
├── src/
│ ├── main/kotlin/com/lgzarturo/springbootcourse/
│ │ └── SpringbootCourseApplication.kt
│ ├── test/kotlin/
│ └── resources/
│ ├── application.properties
│ └── static/
├── build.gradle.kts
├── settings.gradle.kts
└── gradle/wrapper/

📦 Dependencias Esenciales​

Core Web y API​

DependenciaPropósitoUso
Spring WebSpring MVC, REST endpoints@RestController, @GetMapping
Spring ValidationBean Validation@Valid, @NotBlank
Spring Data JPAAbstracción de persistenciaJpaRepository, @Entity

Bases de Datos​

DependenciaUsoNotas
H2 DatabaseDev/test en memoriaConsole en /h2-console (solo dev)
PostgreSQL DriverProducciónRobustez, tipos ricos

Observabilidad y Utilidades​

DependenciaPropósito
Spring Boot ActuatorHealth checks, métricas, info
Spring Configuration ProcessorAutocompletado de config en IDE
Spring Boot DevToolsLiveReload, reinicio automático (dev)
SentryCaptura de excepciones y performance

Ejemplo build.gradle.kts​

dependencies {
implementation("org.springframework.boot:spring-boot-starter-web")
implementation("org.springframework.boot:spring-boot-starter-validation")
implementation("org.springframework.boot:spring-boot-starter-data-jpa")
implementation("org.springframework.boot:spring-boot-starter-actuator")

runtimeOnly("com.h2database:h2")
runtimeOnly("org.postgresql:postgresql")

developmentOnly("org.springframework.boot:spring-boot-devtools")

testImplementation("org.springframework.boot:spring-boot-starter-test")
}

⚙️ Configuración por Perfiles​

application.yaml (Base)​

spring:
application:
name: springboot-course

application-dev.yaml (Desarrollo)​

spring:
datasource:
url: jdbc:h2:mem:course_db;MODE=PostgreSQL;DB_CLOSE_DELAY=-1
driver-class-name: org.h2.Driver
jpa:
hibernate:
ddl-auto: create-drop
properties:
hibernate:
format_sql: true
h2:
console:
enabled: true

server:
port: 8080

management:
endpoints:
web:
exposure:
include: health,info,metrics

application-prod.yaml (Producción)​

spring:
datasource:
url: jdbc:postgresql://${DB_HOST}:5432/course_db
username: ${DB_USERNAME}
password: ${DB_PASSWORD}
driver-class-name: org.postgresql.Driver
jpa:
hibernate:
ddl-auto: validate # Usar migraciones en prod

management:
endpoints:
web:
exposure:
include: health,info,metrics,prometheus

🎯 Clase Principal​

@SpringBootApplication
class SpringbootCourseApplication

fun main(args: Array<String>) {
runApplication<SpringbootCourseApplication>(*args)
}

✅ Verificación Inicial​

1. Health Check​

curl http://localhost:8080/actuator/health

Respuesta esperada:

{ "status": "UP" }

2. Controller Ping (Opcional)​

@RestController
@RequestMapping("/api")
class PingController {
@GetMapping("/ping")
fun ping() = mapOf(
"status" to "ok",
"time" to Instant.now().toString()
)
}

✅ Checklist de Setup​

  • JDK 21 instalado y configurado
  • Gradle wrapper generado
  • Dependencias descargadas (./gradlew dependencies)
  • Aplicación levanta sin errores
  • Actuator health responde UP
  • Perfiles dev/prod configurados
  • H2 console accesible (dev)

📚 Referencias​