Saltar al contenido principal

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:

  1. ✅ Configurar datasources en Spring Boot (HikariCP)
  2. ✅ Comprender y utilizar correctamente @Transactional
  3. ✅ Gestionar los niveles de propagación y aislamiento
  4. ✅ Versionar su esquema de base de datos con Flyway
  5. ✅ Comparar Flyway y Liquibase
  6. ✅ 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​

TipoDuración
Teoría3h (4 capítulos)
Práctica4h (3 TPs)
Total7h (~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 de debit()?
  • ¿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​

  1. 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)
  2. 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:

  1. ¿Sabe qué es un datasource? ☐ Sí ☐ No
  2. ¿Conoce las propiedades ACID? ☐ Sí ☐ No
  3. ¿Sabe qué hace @Transactional? ☐ Sí ☐ No
  4. ¿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


⬅️ Volver al Plan de Curso