MÓDULO 7 - Bases de Datos y Transacciones
¡Bienvenido al Módulo 7! 🗄️
Ahora ya sabe utilizar Spring Data JPA para crear repositorios y ejecutar consultas. Pero ¿sabe realmente cómo Spring gestiona las conexiones a la base de datos? Y sobre todo, ¿entiende las transacciones?
Este módulo le revela los mecanismos esenciales para gestionar sus datos de manera fiable y profesional.
🎓 Objetivos de Aprendizaje
Al final de este módulo, usted será capaz de:
- ✅ Configurar datasources en Spring Boot (HikariCP)
- ✅ Comprender y utilizar correctamente @Transactional
- ✅ Gestionar los niveles de propagación y aislamiento
- ✅ Versionar su esquema de base de datos con Flyway
- ✅ Comparar Flyway y Liquibase
- ✅ Conectar su aplicación a diferentes bases de datos (H2, PostgreSQL, MySQL)
📚 Prerrequisitos
Antes de comenzar este módulo, debe haber:
- ✅ Completado los Módulos 1 a 6
- ✅ Creado entidades JPA con relaciones
- ✅ Utilizado los repositorios de Spring Data JPA
- ✅ Comprendido la arquitectura de 3 capas (Controller, Service, Repository)
¡Si no cumple estos prerrequisitos, regrese a los módulos anteriores!
🗺️ Plan del Módulo
Parte Teórica (4 capítulos)
Capítulo 1: Configuración de Datasources
Duración: 45 minutos
Contenido:
- ¿Qué es un Datasource?
- Configuración en application.properties/yml
- HikariCP: el pool de conexiones por defecto
- Configuración avanzada (min/máx conexiones, timeout)
- Configuración multi-datasources
¿Por qué es importante? Comprender cómo Spring Boot gestiona las conexiones
Capítulo 2: Gestión de Transacciones (@Transactional)
Duración: 1 hora
Contenido:
- ¿Qué es una transacción? (ACID)
- @Transactional explicado en detalle
- Propagación (REQUIRED, REQUIRES_NEW, etc.)
- Niveles de aislamiento
- Rollback y gestión de excepciones
- Errores comunes a evitar
¿Por qué es importante? Garantizar la integridad de los datos
Capítulo 3: Migración de Esquema con Flyway
Duración: 45 minutos
Contenido:
- ¿Por qué versionar el esquema de la base de datos?
- Instalación y configuración de Flyway
- Convención de nombres (V1__, V2__, etc.)
- Migración SQL vs Java
- Rollback y repair
- Mejores prácticas
¿Por qué es importante? Desplegar los cambios de base de datos en producción
Capítulo 4: Migración con Liquibase
Duración: 30 minutos
Contenido:
- Flyway vs Liquibase: comparación
- Formato XML, YAML, JSON
- Changelog y changesets
- Rollback automático
- ¿Cuándo elegir Liquibase?
¿Por qué es importante? Conocer las alternativas
Parte Práctica (3 TPs)
TP7.1: Configuración de Datasource y Pool
Duración: 1h
Objetivo: Configurar y optimizar las conexiones a la base de datos
Usted va a:
- Configurar HikariCP para H2 y PostgreSQL
- Monitorizar el pool de conexiones
- Probar los límites de conexiones
TP7.2: Transacciones y Rollback
Duración: 1h30
Objetivo: Dominar @Transactional
Usted va a:
- Crear operaciones transaccionales
- Simular errores y observar los rollbacks
- Probar la propagación (REQUIRED vs REQUIRES_NEW)
- Gestionar transacciones de solo lectura
TP7.3: Migración con Flyway
Duración: 1h30
Objetivo: Versionar el esquema de la base de datos
Usted va a:
- Configurar Flyway
- Crear scripts de migración
- Simular una evolución de esquema
- Gestionar los datos iniciales
📊 Duración Total
| Tipo | Duración |
|---|---|
| Teoría | 3h (4 capítulos) |
| Práctica | 4h (3 TPs) |
| Total | 7h (~2-3 sesiones) |
🎯 Lo Que Va a Comprender
Antes de este Módulo
// Usted escribía esto sin realmente entender:
@Service
public class TransferService {
@Transactional // ← ¿Por qué? ¿Qué significa realmente?
public void transfer(Long from, Long to, BigDecimal amount) {
accountRepo.debit(from, amount);
accountRepo.credit(to, amount);
}
}
Preguntas sin respuesta:
- ¿Qué pasa si
credit()falla después dedebit()? - ¿Por qué @Transactional y no solo try/catch?
- ¿Cómo gestiona Spring las conexiones a la base de datos?
- ¿Cómo desplegar cambios de esquema en producción?
Después de este Módulo
@Service
public class TransferService {
@Transactional(
propagation = Propagation.REQUIRED, // ← Reutiliza o crea una transacción
isolation = Isolation.READ_COMMITTED, // ← Nivel de aislamiento
rollbackFor = Exception.class // ← Rollback ante cualquier excepción
)
public void transfer(Long from, Long to, BigDecimal amount) {
// ¡Si credit() falla, debit() se ANULA AUTOMÁTICAMENTE!
accountRepo.debit(from, amount);
accountRepo.credit(to, amount);
}
}
Usted sabrá:
- ✅ Cómo Spring gestiona las conexiones (pool HikariCP)
- ✅ Cuándo y cómo usar @Transactional
- ✅ Evitar errores comunes (proxy, self-invocation)
- ✅ Migrar el esquema con Flyway sin riesgos
- ✅ Elegir entre Flyway y Liquibase
🚀 Por Qué Este Módulo Es Crucial
1. La Integridad de los Datos
Escenario catastrófico (sin transacción):
1. Débito de la cuenta A: -100€ ✓
2. Crédito de la cuenta B: ¡ERROR! ✗
3. Resultado: 100€ han "desaparecido" 💀
Las transacciones garantizan: TODO o NADA.
2. El Rendimiento en Producción
Sin pool de conexiones:
- Cada consulta = nueva conexión = LENTO
- 1000 usuarios = 1000 conexiones = BASE DE DATOS SATURADA
Con HikariCP (pool):
- Conexiones reutilizadas = RÁPIDO
- 1000 usuarios = 10 conexiones = BASE DE DATOS FELIZ 😊
3. El Despliegue Sin Estrés
Sin Flyway:
- "¿Ejecutó el script SQL?" 🤔
- "¿Cuál? ¿V3 o V4?" 😰
- "Ups, olvidé una columna" 💀
Con Flyway:
- Migraciones automáticas al iniciar ✓
- Versionado rastreado ✓
- Despliegue tranquilo ✓
🗺️ Progresión en la Formación
Módulo 7 = ¡Dominar los fundamentos de la persistencia!
📖 Cómo Abordar Este Módulo
Teoría ANTES de la Práctica
-
Lea los 4 capítulos teóricos en orden
- Capítulo 1: Datasources (fundamentos)
- Capítulo 2: Transacciones (¡el más importante!)
- Capítulo 3: Flyway (migración principal)
- Capítulo 4: Liquibase (alternativa)
-
Realice los TPs en orden
- TP7.1: Configuración
- TP7.2: Transacciones
- TP7.3: Flyway
Tiempo Recomendado
Opción Intensiva (1 día):
- Mañana: Capítulos 1 y 2 + TP7.1
- Tarde: TP7.2 + Capítulos 3 y 4
- Final de la tarde: TP7.3
Opción Progresiva (2 sesiones):
- Sesión 1: Capítulos 1-2 + TP7.1 y TP7.2
- Sesión 2: Capítulos 3-4 + TP7.3
✅ Autoevaluación
Antes de comenzar, responda:
- ¿Sabe qué es un datasource? ☐ Sí ☐ No
- ¿Conoce las propiedades ACID? ☐ Sí ☐ No
- ¿Sabe qué hace @Transactional? ☐ Sí ☐ No
- ¿Ha utilizado Flyway o Liquibase? ☐ Sí ☐ No
Si respondió "No" a alguna pregunta → ¡Este módulo es para usted!
🎯 Próximo Paso
¿Listo para dominar las conexiones y transacciones?
➡️ Comenzar con el Capítulo 1: Configuración de Datasources