Aller au contenu

Build backend

Cette page explique comment construire et exécuter le backend Spring Boot en dehors de Docker, pour itérer rapidement pendant le développement avec le hot reload de votre IDE.

Stack cible

  • Spring Boot 3.2
  • Java 21 LTS
  • Maven 3.9+
  • MySQL 8 (conteneur ou natif)

Voir Prérequis pour les versions exactes.

Build avec Maven

Depuis la racine du dépôt :

cd backend
mvn clean package

Le build compile le code Java, exécute les tests JUnit, et produit un JAR exécutable dans backend/target/perfshop-0.1.0-beta.jar (le nom exact dépend de la version déclarée dans pom.xml).

Sauter les tests

Pour un cycle d'itération plus rapide :

mvn clean package -DskipTests

À n'utiliser qu'en développement local — la CI et les builds de release doivent toujours exécuter les tests.

Build avec le script fourni

Un script build.sh est fourni à la racine du dépôt pour construire à la fois le backend et les images Docker :

./build.sh

Son équivalent Windows est build.bat. Consultez le contenu du script pour le détail des étapes exécutées.

Lancer en local (sans Docker)

Démarrer la base MySQL

Le plus simple est de démarrer uniquement le conteneur MySQL depuis le compose principal :

docker compose -f docker-compose.desktop.yml up -d perfshop-db

Cela lance MySQL 8 sur localhost:19306 avec les credentials définis dans .env. Flyway exécutera automatiquement V1 à V10 au premier démarrage du backend.

Alternativement, vous pouvez utiliser une installation MySQL native si vous préférez — il suffit de créer une base perfshop et un utilisateur avec les droits nécessaires.

Lancer Spring Boot

Depuis backend/ :

mvn spring-boot:run

Spring Boot se lance sur le port 8080 par défaut (pas 9080 — c'est le mapping Docker Compose qui redirige 9080:8080 en mode conteneurisé ; en local, on utilise le port interne directement).

Lancer le JAR directement

Si vous préférez lancer le JAR packagé :

java -jar target/perfshop-0.1.0-beta.jar

Configuration par variables d'environnement

Le backend est entièrement configurable par variables d'environnement. Les plus importantes :

Variable Défaut Rôle
SPRING_DATASOURCE_URL jdbc:mysql://localhost:19306/perfshop URL JDBC de la base
SPRING_DATASOURCE_USERNAME perfshop Utilisateur MySQL
SPRING_DATASOURCE_PASSWORD perfshop123 Mot de passe MySQL
PERFSHOP_LANG fr Langue active (fr ou en)
PERFSHOP_ADMIN_EMAIL admin@perfshop.fr Email du superadmin (bootstrap)
PERFSHOP_ADMIN_PASSWORD perfshop Mot de passe du superadmin (bootstrap)
PERFSHOP_LICENSE_KEY (vide) Clé de licence à précharger au démarrage
CORS_ALLOWED_ORIGINS http://localhost:9091,... Origins autorisés pour CORS

La liste complète est dans la référence des variables d'environnement.

Windows PowerShell

$env:SPRING_DATASOURCE_URL = "jdbc:mysql://localhost:19306/perfshop"
$env:PERFSHOP_LANG = "fr"
mvn spring-boot:run

Unix / macOS

export SPRING_DATASOURCE_URL=jdbc:mysql://localhost:19306/perfshop
export PERFSHOP_LANG=fr
mvn spring-boot:run

Avec un fichier .env

Ou plus simplement, utilisez votre .env existant et un plugin IDE qui l'injecte (IntelliJ, VS Code). Le application.yml de Spring Boot référence les variables d'env standard via ${VAR:default}.

Vérifier que le backend est up

Une fois démarré, trois endpoints sont utiles pour vérifier l'état :

# Health basique
curl http://localhost:8080/actuator/health
# → {"status":"UP"}

# Infos build
curl http://localhost:8080/actuator/info

# Métriques Prometheus
curl http://localhost:8080/actuator/prometheus | head -20

Le port management 9090 utilisé par certains endpoints sensibles (heap dump, thread dump) n'est exposé qu'en mode conteneurisé.

Hot reload et dev loop

Spring Boot DevTools est inclus dans les dépendances de développement. Quand il détecte un changement dans target/classes/, il redémarre automatiquement le contexte applicatif — beaucoup plus rapide qu'un restart complet de JVM.

Pour bénéficier du hot reload depuis IntelliJ :

  1. File → Settings → Build → Compiler : cocher Build project automatically
  2. File → Settings → Advanced Settings : cocher Allow auto-make to start even if developed application is currently running

Depuis VS Code avec l'extension Spring Boot Dashboard, le redémarrage automatique est activé par défaut dès que DevTools est présent.

Tests unitaires

mvn test

Les tests utilisent JUnit 5 et Spring Boot Test. Ils tournent contre une base H2 en mémoire quand c'est possible, ou contre un MySQL Testcontainers pour les tests d'intégration plus poussés.

Déboguer

Pour attacher un debugger IDE au backend :

mvn spring-boot:run -Dspring-boot.run.jvmArguments="-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005"

Puis dans votre IDE, créez une configuration Remote JVM Debug pointant sur localhost:5005.

Construire l'image Docker sans Docker Compose

Si vous voulez construire juste l'image Docker du backend sans l'ensemble de la stack :

cd backend
docker build -t perfshop-app:local .

Le Dockerfile est un multi-stage qui compile avec Maven puis copie le JAR dans une image eclipse-temurin:21-jre minimaliste.

Voir aussi