Activer ou désactiver une fonctionnalité d’un simple paramètre ? C’est possible, et ça change la donne.
Quand on développe une application Spring Boot, on a parfois besoin de conditionner l’activation de certaines fonctionnalités sans pour autant tout redéployer à chaque changement. Que ce soit pour activer un service de notifications, désactiver temporairement un traitement lourd ou tester un comportement en production, il existe une approche élégante : @ConditionalOnProperty.
En clair, cette annotation permet de ne créer un bean que si une propriété est définie (ou vaut true, par exemple) dans le fichier de configuration.
Quelques usages concrets :
✅ Activer un module de paiement spécifique selon l’environnement ou le pays de l’utilisateur
✅ Mettre en veille une tâche planifiée pendant les opérations de maintenance, sans modifier le code
✅ Déployer une nouvelle API uniquement pour un sous-ensemble d’utilisateurs dans une stratégie de “canary release”
✅ Créer un service de logs avancés qui ne s’active qu’en cas de besoin de debug poussé
Résultat : un code plus propre, plus souple, et une mise en production plus sereine. C’est aussi un excellent levier pour intégrer des flags de fonctionnalités dans une pipeline CI/CD, ou préparer une montée en charge progressive.
C'est très utile, mais attention ça ne fonctionne pas avec Spring AOT (ou plutôt il faudra faire plusieurs build en passant la valeur souhaitée lors du build)
TL;DR : c'est du Feature Flag
Ce que je décrie avec cette approche du Feature Flag, c'est que tu es obligé à minima de redemarrer ton application si tu dois activer/désactiver une feature, à moins d'avoir mis en place des mécanisme de refresh de contexte Spring.
A mon avis, les Conditional Beans marchent très bien quand le besoin c'est d'activer ou pas l'intégration avec des composants externes (a.k.a l'inclure ou pas dans le contexte Spring). Par exemple, sur un environnement de tests système, je veux désactiver l'intégration avec la brique de notifications.
Il est plus intéressant d'avoir une feature déployée (les beans présents dans le contexte Spring) et avoir la marge de manoeuvre pour l'activer / désactiver à la volée.
Pour faire du vrai Feature Flag, il y a une spec. CNCF prévue, et plusieurs implémentations : https://openfeature.dev/