Vue d’ensemble
Les profils de configuration vous permettent de définir des valeurs spécifiques à l’environnement sans changer le code. Les profils sont des clés préfixées dans les fichiers de propriétés et sont activés via la propriété système mp.config.profile.
Bases
Dans microprofile-config.properties ou toute source de configuration, préfixez une clé avec %{profile}. pour la rendre spécifique au profil :
# Par défaut (s'applique quand aucun profil n'est actif)
app.name=MyApp
app.debug=false
app.port=8080
# Profil de développement
%dev.app.debug=true
%dev.app.port=9000
%dev.app.log.level=DEBUG
# Profil de production
%prod.app.port=8443
%prod.app.log.level=INFO
%prod.app.https.enabled=true
Activez le profil dev :
java -Dmp.config.profile=dev MyApplication
Maintenant :
- app.name → retourne toujours MyApp (pas de surcharge spécifique au profil)
- app.debug → retourne true (de %dev.app.debug)
- app.port → retourne 9000 (de %dev.app.port)
Comportement de repli
Si une clé spécifique au profil n’existe pas, Ravel bascule à la clé de base :
app.name=DefaultName
%dev.app.name=DevName
Avec mp.config.profile=dev :
- app.name → cherche %dev.app.name (trouvé : DevName) → retourne DevName
Sans profil :
- app.name → cherche la base app.name (trouvé : DefaultName) → retourne DefaultName
Plusieurs valeurs de profil
Seul un profil à la fois est actif (défini via mp.config.profile). Vous ne pouvez pas combiner plusieurs profils avec une seule lookup.
Cependant, vous pouvez basculer les profils dynamiquement :
// Lancer avec le profil dev
System.setProperty("mp.config.profile", "dev");
Config devConfig = ConfigProvider.getConfig();
String debugDev = devConfig.getValue("app.debug", String.class); // "true"
// Basculer à prod
System.setProperty("mp.config.profile", "prod");
Config prodConfig = ConfigProvider.getConfig();
String debugProd = prodConfig.getValue("app.debug", String.class); // "false"
Profils courants
Bien que vous puissiez définir n’importe quels noms de profils, voici les conventions courantes :
| Profil | Usage |
|---|---|
|
Développement : journalisation détaillée, endpoints localhost, sécurité désactivée |
|
Test : bases de données en mémoire, services mockés |
|
Production : journalisation minimale, endpoints renforcés, TLS/HTTPS |
|
Pré-production : similaire à prod mais avec endpoints de staging |
Priorité des profils
Quand plusieurs sources de configuration définissent la même clé, l’ordinal s’applique toujours :
# SystemPropertiesConfigSource (ordinal 400)
-Dapp.name=CliOverride
# EnvironmentVariablesConfigSource (ordinal 300)
APP_NAME=EnvValue
# microprofile-config.properties (ordinal 100)
app.name=FileValue
%dev.app.name=DevFileValue
Avec mp.config.profile=dev :
-
Cherche la propriété système
-Dapp.name(ordinal 400) → trouvé :CliOverride→ retourner -
(les chèques de var env et de fichier sont sautés ; déjà trouvé)
Sans profil, la même précédence s’applique :
-
Cherche
-Dapp.name→ trouvé :CliOverride→ retourner
Les préfixes de profil sont transparents à la logique d’ordinal — seul l’ordinal compte pour la priorité entre les sources.
Avec expressions de propriété
Les expressions sont résolues après la correspondance des profils :
# Configuration de base de base de données
db.host=prod-db.example.com
db.user=app_user
db.jdbc.url=jdbc:postgresql://${db.host}:5432/appdb?user=${db.user}
# Les surcharges du profil dev
%dev.db.host=localhost
%dev.db.user=dev_user
# L'expression db.jdbc.url utilisera les valeurs résolues (spécifiques au profil)
Avec mp.config.profile=dev :
- db.jdbc.url se résout à jdbc:postgresql://localhost:5432/appdb?user=dev_user
Intégration CDI
Avec l’intégration CDI, @ConfigProperty respecte les profils :
@ApplicationScoped
public class AppConfig {
@Inject
@ConfigProperty("app.debug")
boolean debug;
@Inject
@ConfigProperty("app.port")
int port;
}
// Avec mp.config.profile=dev :
// - debug = true (de %dev.app.debug)
// - port = 9000 (de %dev.app.port)
Exemple : Déploiement multi-étapes
# Commun
app.name=PaymentService
app.version=2.1.0
db.pool.size=10
# Développement
%dev.app.log.level=DEBUG
%dev.db.host=localhost
%dev.db.port=5432
%dev.api.endpoint=http://localhost:8080
# Staging
%staging.app.log.level=INFO
%staging.db.host=staging-db.internal
%staging.db.port=5432
%staging.api.endpoint=https://staging-api.example.com
%staging.db.pool.size=20
# Production
%prod.app.log.level=WARN
%prod.db.host=prod-db.cluster.example.com
%prod.db.port=5432
%prod.api.endpoint=https://api.example.com
%prod.db.pool.size=50
%prod.tls.enabled=true
Déploiement avec :
# Développement
java -Dmp.config.profile=dev -jar app.jar
# Staging
java -Dmp.config.profile=staging -jar app.jar
# Production
java -Dmp.config.profile=prod -jar app.jar
Suivant
-
Intégration CDI — utiliser les profils avec
@ConfigProperty -
Usage — configuration programmatique