Kata implementé avec Spring Boot et Spring Batch, intégrant :
- une transformation
FooBarQuixvia API REST, - un traitement par batch avec lecture/écriture de fichiers,
- une gestion d’erreurs centralisée,
- des réponses JSON standardisées.
| Outil / Lib | Version |
|---|---|
| Java | 17 |
| Spring Boot | 3.5.0 |
| Spring Batch | 5.2.2 |
| Spring Web | 6.2.7 |
| JUnit | 5.12.2 |
| Mockito | 5.17.0 |
| MockMvc | intégré |
| H2 Database | 2.3.232 |
| Maven | 3.8+ |
- Java 17 installé
- Maven 3.8+ installé
mvn spring-boot:run- URL : http://localhost:8080/h2-console
- JDBC URL :
jdbc:h2:mem:testdb - User :
sa - Password : (laissé vide)
- GET
/api/transform/{number} - Retourne une chaîne transformée selon les règles "FooBarQuix" :
- multiple de 3 → "FOO"
- multiple de 5 → "BAR"
- multiple de 7 → "QUIX"
- chaque chiffre 3, 5, 7 dans le nombre → respectivement "FOO", "BAR", "QUIX"
- POST
/api/batch/run - Exécute un job Spring Batch :
- lit un fichier ligne par ligne,
- applique la transformation,
- écrit le résultat dans un fichier de sortie.
Dans cet exemple , le fichier input.txt est placé a la racine. mais l'emplacement du fichier (input et output) ainsi que leurs noms sont configurables via le fichier application.yml
# Chemins définis dans application.yml
batch:
input-file: input.txt
output-file: output.txtToutes les réponses HTTP sont encapsulées dans un format standardisé :
{
"success": true,
"message": "Succès",
"data": "FOOBAR"
}{
"success": false,
"message": "Le nombre 105 n'est pas valide. Il doit être entre 0 et 100.",
"data": null
}Le projet inclut :
- Tests unitaires sur la logique métier (service de transformation),
- Tests d'intégration via MockMvc pour les endpoints REST.
- JUnit 5
- Mockito
- MockMvc (Spring Boot Test)
Exemples de tests :
-
GET /api/transform/3 → retourne FOOFOO en payload (champs data)
-
GET /api/transform/105 → retourne un code HTTP 400 (Bad Request)
-
POST /api/batch/run → lance le traitement batch (succès ou erreur)
mvn clean test
src
├── main
│ ├── java/com.batch.foobarquix
│ │ ├── controller # Endpoints REST
│ │ ├── service # Logique métier
│ │ ├── batch # Configuration Spring Batch
│ │ ├── config # Configuration centralisée (@ConfigurationProperties)
│ │ ├── exception # Gestion d'exceptions globale
│ │ └── util # Constantes partagées
│ └── resources
│ └── application.properties
├── test # Tests unitaires & d'intégration- Externaliser les règles métier dans un fichier (XML, JSON) pour les rendre dynamiques et modifiables sans recompilation.
- Générer un rapport de traitement après chaque exécution batch (succès/échecs, métriques).
- Ajouter un pipeline CI/CD (ex. GitHub Actions).
- Intégrer une documentation Swagger/OpenAPI ou une IHM pour le déclenchement.
Sifokl