Les profils dans Spring Boot

Publié le 01/03/2026 Source : sfeir.dev

Dans toute application Spring Boot un tant soit peu sérieuse, une question finit toujours par se poser :

Comment adapter le comportement de l’application selon l’environnement ?

Développement, tests, intégration, production…
Les contraintes changent, les ressources aussi, et pourtant le code reste le même.

La réponse historique de Spring à ce problème tient en un mot : **les profils**.

Derrière les fichiers application-dev.properties, application-prod.yml ou application-test.properties se cache un mécanisme fondamental, simple en apparence, mais structurant pour toute application Spring Boot bien conçue.

Le problème : une application, plusieurs contextes

Sans profils, la gestion des environnements repose souvent sur des pratiques risquées :

Ces pratiques fonctionnent… jusqu’au jour où elles ne fonctionnent plus.

Spring a très tôt posé un principe clair :

**Le code ne doit pas connaître l’environnement dans lequel il s’exécute.**

Ce sont les profils qui incarnent ce principe.

Qu’est-ce qu’un profil Spring ?

Un **profil Spring** est une étiquette logique qui permet d’activer ou désactiver :

Un profil ne représente pas uniquement un environnement technique.
Il représente un **contexte d’exécution**.

Exemples courants :

Les fichiers application-xxx.properties

Spring Boot charge automatiquement les fichiers de configuration selon les profils actifs.

Convention de nommage

application.properties
application-dev.properties
application-test.properties
application-prod.properties

Exemple

# application.properties
spring.application.name=demo-app

# application-dev.properties
spring.datasource.url=jdbc:h2:mem:testdb

# application-prod.properties
spring.datasource.url=jdbc:postgresql://db/prod

Le mécanisme est simple, lisible, et prévisible.
C’est précisément pour cela qu’il est si puissant.

Activer un profil

Via les propriétés (Configuration statique)

Dans votre application.properties de base :

spring.profiles.active=dev

Via les variables d’environnement (Idéal pour Docker/Cloud)

C’est la méthode recommandée pour la production.

export SPRING_PROFILES_ACTIVE=prod
java -jar my-app.jar

Via les arguments de la ligne de commande

Pratique pour un test rapide en local.

java -jar my-app.jar --spring.profiles.active=test

Profils et beans conditionnels

C’est ici que les profils deviennent vraiment puissants. Ils permettent de conditionner l’existence même d’un composant Java grâce à l’annotation @Profile.

**Exemple : Le service d’envoi d’emails**

On ne veut pas envoyer de vrais emails pendant le développement.

public interface EmailService {
    void send(String message);
}

@Profile("dev")
@Service
public class MockEmailService implements EmailService {
    @Override
    public void send(String message) {
        System.out.println("[DEV - LOG ONLY] " + message);
    }
}

@Profile("prod")
@Service
public class SmtpEmailService implements EmailService {
    @Override
    public void send(String message) {
        // Logique réelle d'envoi SMTP
    }
}

**Le bénéfice :** Le reste de votre application s’injecte un EmailService sans jamais savoir s’il s’agit d’un simulateur ou du vrai service.

Les 3 règles d’or pour bien utiliser les profils

Conclusion

Les profils Spring Boot ne sont pas qu’un simple gadget de configuration. C’est l’outil qui permet de garantir l’**immuabilité de votre artefact** : vous compilez votre JAR une seule fois, et c’est le profil injecté au démarrage qui l’adapte à son environnement.