Ce projet a été conçu pour explorer concrètement le fonctionnement de Java et de Spring Boot à travers une application réelle. Il sert de socle technique stable permettant de mettre en place et de tester des pipelines CI/CD sur différentes plateformes, tout en expérimentant des outils dédiés à la qualité et à la sécurité du code.
Au fil de la série, cette application devient un véritable fil conducteur pour aborder progressivement des problématiques essentielles du développement moderne. Les sujets traités couvrent les tests unitaires et d'intégration, la gestion des profils Spring dans un contexte multi-branches, ainsi que la mise en place de stratégies de qualité incluant tests API et tests de charge. Le projet intègre également des aspects liés au monitoring et à la sécurité, notamment à travers l'utilisation d'Actuator.
Crée à partir d'un squelette, via: https://start.spring.io/
SpringBoot: 3.5.4 - Build tool: Maven
Language: Java - Packaging: JAR
Java: 17 - Dépendances: Spring Web, Spring Data JPA, PostgreSQL Driver, Lombok
src/
├─ main/
│ ├─ java/com/example/flashcards/
│ │ ├─ controller/ # REST controllers
│ │ ├─ service/ # Business services
│ │ ├─ Entities/ # Entities
│ │ ├─ dto/ # DTO for API exchanges
│ │ └─ repository/ # JPA interfaces
│ └─ resources/
│ └─ application.properties
└─ test/
├─ controller/ # Unit tests for controllers
├─ service/ # Unit tests for services
└─ integration/ # Integration tests
./mvnw clean package
Si Maven n'est pas présent ou incompatible, la version requise est téléchargée automatiquement
La base de données Postgres (16) est la base de données principales, les test (ut-it) utilisent la base H2 en mémoire
psql --version
Retourne #psql (PostgreSQL) 16.9
Un script bash, localisé dans /flashcards/init-db.sh permet de créer la base lors de son lancement. Dans l'application, sur le profil dev (profil par défaut) il se lance automatique avec commande ./mvnw clean install
psql -h localhost -U postgres
Mot de passe pour l'utilisateur postgres :
#une x connecté:
postgres=# CREATE DATABASE flashcardsdb;
CREATE DATABASE
postgres=# \q
Les fichiers init-data.sql sont fournis pour chaque branche afin de créer les tables, et d'insérer des catégories et flashcards de test
| Branche | Profil | Port | Comportement |
|---|---|---|---|
| develop | dev | 8080 | Localisé dans src/main/resources/db/dev/init-data.sql Ce fichier est auto-loadé (local et develop) lors de chaques lancement de l'application, toute modification sera donc écrasée au prochain démarrage de l'application |
| staging | staging | 8081 | Initialisation manuelle: le fichier de données est localisée dans db/staging Utiliser la commande psql: psql -h localhost -U postgres -d flashcardsdb -f db/staging/init-data.sql pour insérer les données |
| main | prod | 8080 | Initialisation manuelle: le fichier de données est localisée dans db/prod Utiliser la commande psql: psql -h localhost -U postgres -d flashcardsdb -f db/prod/init-data.sql pour insérer les données |
Les fichiers sont localisé dans: src/main/resources/
→ Le fichier application.properties défini la base de données, le user et le mot de passe utilisé.
→ L'utilisateur postgres étant l'utilisateur admin par défaut de Postgres, le mot de passe: pswd
| CRUD complet pour les categories | GET /api/categories - GET /api/categories/{id} - POST - PUT - DELETE |
| CRUD complet pour les flashcards | GET /api/flashcards - GET /api/flashcards/{id} - POST - PUT- DELETE |
| Endpoints de recherche / filtrage | GET /api/categories/search?name=Bash: Search category by name GET /api/flashcards/search?question=branch: Search flashcards by question |
La liste complète est disponible dans le README du projet
Plus "user-friendly", une interface Web simple est fournie via: src/main/resources/static,
Elle permet d'effectuer le CRUD complet de manière fluide tout en visualisant les catégories ainsi que les flashcards (question/réponse) associées

Pour voir ce qui à été mis en place dans l'application et comment utiliser les accès restreints, voir l'article: Ajout d'Actuator en 3 étapes
ou, le readme dans le repository Github
Dans staging/main, le seuil de couverture est défini dans les workflows:
/mvnw clean test
./mvnw clean verify
./mvnw -Dspring.profiles.active=it test
./mvnw checkstyle:check
./mvnw spotbugs:check
./mvnw jacoco:report
/mvnw clean test
./mvnw clean verify -Djacoco.minimum.coverage=0.70
Ce projet utilise Spotless pour garantir la cohérence du formatage du code. Appliquez la commande pour corriger/aligner le formatage
La validation du code est vérifiée dans la CI avec ./mvnw spotless:check./mvnw spotless:apply
./mvnw clean verify
Pour + d'informations concernant l'Intégration Continue, explorez les articles correspondant ou rv dans le readme_ci du repository Flashcards
Cette première brique pose volontairement des bases solides.
L'objectif n'est pas la complexité fonctionnelle, mais la maîtrise réaliste et progressive de l'écosystème CI/CD autour d'une application Spring Boot.
Dans l'article suivant, nous verrons comment ajouter les tests unitaires, en prévision de gérer la couverte de code