Aller au contenu principal

MODULE 7 - Bases de Données et Transactions

Bienvenue au Module 7! 🗄️​

Vous savez maintenant utiliser Spring Data JPA pour créer des repositories et exécuter des requêtes. Mais savez-vous comment Spring gère réellement les connexions à la base de données? Et surtout, comprenez-vous les transactions?

Ce module vous dévoile les mécanismes essentiels pour gérer vos données de manière fiable et professionnelle.


🎓 Objectifs d'Apprentissage​

À la fin de ce module, vous serez capable de:

  1. ✅ Configurer des datasources Spring Boot (HikariCP)
  2. ✅ Comprendre et utiliser @Transactional correctement
  3. ✅ Gérer les niveaux de propagation et d'isolation
  4. ✅ Versionner votre schéma de BDD avec Flyway
  5. ✅ Comparer Flyway et Liquibase
  6. ✅ Connecter votre application à différentes BDD (H2, PostgreSQL, MySQL)

📚 Prérequis​

Avant de commencer ce module, vous devez avoir:

  • ✅ Complété les Modules 1 à 6
  • ✅ Créé des entités JPA avec des relations
  • ✅ Utilisé les repositories Spring Data JPA
  • ✅ Compris l'architecture 3 couches (Controller, Service, Repository)

Si ces prérequis ne sont pas acquis, retournez aux modules précédents!


🗺️ Plan du Module​

Partie Théorique (4 chapitres)​

Chapitre 1: Configuration des Datasources​

Durée: 45 minutes

Contenu:

  • Qu'est-ce qu'une Datasource?
  • Configuration dans application.properties/yml
  • HikariCP: le pool de connexions par défaut
  • Configuration avancée (min/max connections, timeout)
  • Configuration multi-datasources

Pourquoi important? Comprendre comment Spring Boot gère les connexions


Chapitre 2: Gestion des Transactions (@Transactional)​

Durée: 1 heure

Contenu:

  • Qu'est-ce qu'une transaction? (ACID)
  • @Transactional expliqué en détail
  • Propagation (REQUIRED, REQUIRES_NEW, etc.)
  • Niveaux d'isolation
  • Rollback et gestion des exceptions
  • Pièges courants à éviter

Pourquoi important? Garantir l'intégrité des données


Chapitre 3: Migration de Schéma avec Flyway​

Durée: 45 minutes

Contenu:

  • Pourquoi versionner le schéma de BDD?
  • Installation et configuration de Flyway
  • Convention de nommage (V1__, V2__, etc.)
  • Migration SQL vs Java
  • Rollback et repair
  • Best practices

Pourquoi important? Déployer les changements de BDD en production


Chapitre 4: Migration avec Liquibase​

Durée: 30 minutes

Contenu:

  • Flyway vs Liquibase: comparaison
  • Format XML, YAML, JSON
  • Changelog et changesets
  • Rollback automatique
  • Quand choisir Liquibase?

Pourquoi important? Connaître les alternatives


Partie Pratique (3 TPs)​

TP7.1: Configuration Datasource et Pool​

Durée: 1h

Objectif: Configurer et optimiser les connexions BDD

Vous allez:

  • Configurer HikariCP pour H2 et PostgreSQL
  • Monitorer le pool de connexions
  • Tester les limites de connexions

TP7.2: Transactions et Rollback​

Durée: 1h30

Objectif: Maîtriser @Transactional

Vous allez:

  • Créer des opérations transactionnelles
  • Simuler des erreurs et observer les rollbacks
  • Tester la propagation (REQUIRED vs REQUIRES_NEW)
  • Gérer les transactions en lecture seule

TP7.3: Migration avec Flyway​

Durée: 1h30

Objectif: Versionner le schéma de BDD

Vous allez:

  • Configurer Flyway
  • Créer des scripts de migration
  • Simuler une évolution de schéma
  • Gérer les données initiales

📊 Durée Totale​

TypeDurée
Théorie3h (4 chapitres)
Pratique4h (3 TPs)
Total7h (~2-3 séances)

🎯 Ce Que Vous Allez Comprendre​

Avant ce Module​

// Vous écriviez ça sans vraiment comprendre:
@Service
public class TransferService {

@Transactional // ← Pourquoi? C'est quoi au juste?
public void transfer(Long from, Long to, BigDecimal amount) {
accountRepo.debit(from, amount);
accountRepo.credit(to, amount);
}
}

Questions sans réponses:

  • Que se passe-t-il si credit() échoue après debit()?
  • Pourquoi @Transactional et pas juste des try/catch?
  • Comment Spring gère les connexions à la BDD?
  • Comment déployer des changements de schéma en production?

Après ce Module​

@Service
public class TransferService {

@Transactional(
propagation = Propagation.REQUIRED, // ← Réutilise ou crée une transaction
isolation = Isolation.READ_COMMITTED, // ← Niveau d'isolation
rollbackFor = Exception.class // ← Rollback sur toute exception
)
public void transfer(Long from, Long to, BigDecimal amount) {
// Si credit() échoue, debit() est AUTOMATIQUEMENT annulé!
accountRepo.debit(from, amount);
accountRepo.credit(to, amount);
}
}

Vous saurez:

  • ✅ Comment Spring gère les connexions (HikariCP pool)
  • ✅ Quand et comment utiliser @Transactional
  • ✅ Éviter les pièges courants (proxy, self-invocation)
  • ✅ Migrer le schéma avec Flyway sans risque
  • ✅ Choisir entre Flyway et Liquibase

🚀 Pourquoi Ce Module Est Crucial​

1. L'Intégrité des Données​

Scénario catastrophe (sans transaction):
1. Débit du compte A: -100€ ✓
2. Crédit du compte B: ERREUR! ✗
3. Résultat: 100€ ont "disparu" 💀

Les transactions garantissent: TOUT ou RIEN.


2. La Performance en Production​

Sans pool de connexions:
- Chaque requête = nouvelle connexion = LENT
- 1000 utilisateurs = 1000 connexions = BDD SURCHARGÉE

Avec HikariCP (pool):
- Connexions réutilisées = RAPIDE
- 1000 utilisateurs = 10 connexions = BDD HEUREUSE 😊

3. Le Déploiement Sans Stress​

Sans Flyway:
- "Tu as exécuté le script SQL?" 🤔
- "Lequel? V3 ou V4?" 😰
- "Oups, j'ai oublié une colonne" 💀

Avec Flyway:
- Migrations automatiques au démarrage ✓
- Versioning tracé ✓
- Déploiement serein ✓

🗺️ Progression dans la Formation​

Module 7 = Maîtriser les fondations de la persistance!


📖 Comment Aborder Ce Module​

Théorie AVANT Pratique​

  1. Lisez les 4 chapitres théoriques dans l'ordre

    • Chapitre 1: Datasources (fondations)
    • Chapitre 2: Transactions (le plus important!)
    • Chapitre 3: Flyway (migration principale)
    • Chapitre 4: Liquibase (alternative)
  2. Faites les TPs dans l'ordre

    • TP7.1: Configuration
    • TP7.2: Transactions
    • TP7.3: Flyway

Temps Recommandé​

Option Intensive (1 journée):

  • Matin: Chapitres 1 et 2 + TP7.1
  • Après-midi: TP7.2 + Chapitres 3 et 4
  • Fin d'après-midi: TP7.3

Option Progressive (2 séances):

  • Séance 1: Chapitres 1-2 + TP7.1 et TP7.2
  • Séance 2: Chapitres 3-4 + TP7.3

✅ Auto-Évaluation​

Avant de commencer, répondez:

  1. Savez-vous ce qu'est une datasource? ☐ Oui ☐ Non
  2. Connaissez-vous les propriétés ACID? ☐ Oui ☐ Non
  3. Savez-vous ce que fait @Transactional? ☐ Oui ☐ Non
  4. Avez-vous déjà utilisé Flyway ou Liquibase? ☐ Oui ☐ Non

Si vous avez répondu "Non" à une seule question → Ce module est pour vous!


🎯 Prochaine Étape​

Prêt à maîtriser les connexions et transactions?

➡️ Commencer avec le Chapitre 1: Configuration des Datasources


⬅️ Retour au Plan de Cours