Vous utilisez @Transactional et @Async dans la même appli Spring ? Vous devriez lire ceci. 👇
C’est un piège courant chez les développeurs Spring : croire qu'une méthode asynchrone hérite automatiquement du contexte transactionnel de la méthode appelante.
Le problème : Lorsqu'une méthode s'exécute de manière asynchrone, elle démarre dans un nouveau thread qui n'a aucune connaissance de la transaction en cours. Résultat : vos opérations en base peuvent échouer silencieusement ou créer des incohérences.
Les règles à retenir :
1- Séparez vos services : n'appelez jamais une méthode @Async depuis la même classe
2- Transactionnez explicitement : ajoutez @Transactional sur vos méthodes async qui manipulent des données
3- Choisissez la bonne propagation : utilisez REQUIRES_NEW si vous voulez une transaction complètement indépendante
Cette séparation des préoccupations rend votre code plus prévisible et évite les surprises en production.