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:
- ✅ Configurer des datasources Spring Boot (HikariCP)
- ✅ Comprendre et utiliser @Transactional correctement
- ✅ Gérer les niveaux de propagation et d'isolation
- ✅ Versionner votre schéma de BDD avec Flyway
- ✅ Comparer Flyway et Liquibase
- ✅ 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
| Type | Durée |
|---|---|
| Théorie | 3h (4 chapitres) |
| Pratique | 4h (3 TPs) |
| Total | 7h (~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èsdebit()? - 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
-
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)
-
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:
- Savez-vous ce qu'est une datasource? ☐ Oui ☐ Non
- Connaissez-vous les propriétés ACID? ☐ Oui ☐ Non
- Savez-vous ce que fait @Transactional? ☐ Oui ☐ Non
- 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