Variables d'environnement avec Spring Boot et Docker - 0x485254/brief-26 GitHub Wiki

🐳 Variables d'environnement avec Spring Boot et Docker

📅 Date : 27/06/2025

Ce document explique comment les variables d’environnement sont gérées lorsqu’on utilise Spring Boot avec Docker et Docker Compose.


🧩 Sources possibles de variables

Source Utilisé pour ? Lu par Spring Boot ? Lu par Docker ?
.env Interpolation dans docker-compose.yml ❌ (non) ✅ (oui)
application.properties Configuration de base Spring ✅ (oui) ❌ (non)
application-local.properties Config locale non committée ✅ (si profil actif) ❌ (non)
environment: dans Docker Surcharges et secrets injectés ✅ (oui) ✅ (oui)
Arguments CLI (--var=...) Valeurs prioritaires ✅ (oui) ❌ (non)

⚙️ Priorité de résolution des variables par Spring Boot

Spring Boot lit les variables dans cet ordre de priorité :

  1. Variables système / Docker
  2. Arguments CLI (--DB_HOST=...)
  3. Fichiers application-*.properties
  4. **Valeurs par défaut dans les $Ellipsis

Exemple :

spring.datasource.url=jdbc:postgresql://${DB_HOST:localhost}:${DB_PORT:5432}/${DB_NAME:easygroup}

Si DB_HOST est défini dans Docker : c’est cette valeur qui sera utilisée.


🐳 Comportement avec Docker Compose

environment:
  - DB_HOST=db
  - DB_PORT=${DB_PORT:-5432}
  - DB_NAME=${DB_NAME:-easygroup}
  ...

Ces variables sont transmises au contenant Docker et visibles de Spring Boot comme des variables système.


📁 Et le fichier .env ?

Si tu as un .env au même niveau que docker-compose.yml :

  • Docker Compose l'utilisera pour remplir les $Ellipsis dans le fichier YAML
  • Spring Boot ne le lit pas directement

👉 Pour que Spring Boot accède à .env, il faut utiliser une lib tierce comme dotenv-java.


✅ Bonnes pratiques recommandées

  • Utiliser .env pour injecter les variables dans docker-compose.yml
  • Utiliser application.properties pour les valeurs partagées
  • Utiliser application-local.properties pour les valeurs locales (non committées)
  • Définir SPRING_PROFILES_ACTIVE dans Docker pour activer le bon profil
  • Ne jamais committer de mots de passe ou secrets

🌐 Accès Swagger

Une fois lancé avec :

./mvnw spring-boot:run

ou via conteneur Docker

Swagger est accessible à : http://localhost:8080/swagger-ui/index.html