Chapitre 1: Spring Initializr
Introduction
Spring Initializr est un générateur de projets web qui permet de créer rapidement un projet Spring Boot avec les dépendances et la configuration de base nécessaires. C'est le point de départ recommandé pour tout nouveau projet Spring Boot.
Objectifs du Chapitre
À la fin de ce chapitre, vous serez capable de:
- Utiliser Spring Initializr pour créer des projets Spring Boot
- Comprendre les différentes options de configuration
- Choisir les bonnes dépendances pour votre projet
- Générer et importer un projet dans votre IDE
Qu'est-ce que Spring Initializr?
Définition
Spring Initializr est un outil de bootstrap qui génère la structure de base d'un projet Spring Boot. Il:
- Crée la structure de répertoires Maven ou Gradle
- Génère le fichier
pom.xmloubuild.gradleavec les dépendances - Ajoute la classe principale avec
@SpringBootApplication - Configure les fichiers de ressources de base
Accès à Spring Initializr
Il existe plusieurs façons d'accéder à Spring Initializr:
- Interface Web: https://start.spring.io/
- IDE intégré: IntelliJ IDEA, VS Code avec extensions Spring
- Spring CLI: Ligne de commande
- API REST: Pour l'automatisation
Interface Web de Spring Initializr
URL d'Accès
https://start.spring.io/
Sections Principales
L'interface est divisée en plusieurs sections:
Configuration du Projet
1. Project Type (Type de Projet)
Choix disponibles:
| Type | Description | Utilisation |
|---|---|---|
| Maven | Outil de build XML | Recommandé pour débutants, très documenté |
| Gradle | Outil de build Groovy/Kotlin DSL | Plus moderne, plus rapide, syntaxe concise |
Recommandation: Maven pour ce cours (plus standard dans l'industrie Java)
2. Language (Langage)
Choix disponibles:
| Langage | Description | Niveau |
|---|---|---|
| Java | Langage principal de Spring | Recommandé |
| Kotlin | Langage moderne de JetBrains | Avancé |
| Groovy | Langage dynamique | Moins courant |
Recommandation: Java (langage de ce cours)
3. Spring Boot Version
Format de version: X.Y.Z
- X: Version majeure (changements majeurs)
- Y: Version mineure (nouvelles fonctionnalités)
- Z: Version patch (corrections de bugs)
Exemple:
3.2.0
Types de versions:
| Type | Suffixe | Signification | Utilisation |
|---|---|---|---|
| Release | Aucun | Version stable | Production |
| Snapshot | -SNAPSHOT | Version en développement | Développement uniquement |
| Milestone | -M1, -M2 | Version beta | Tests |
| Release Candidate | -RC1 | Candidat à la release | Tests finaux |
Recommandation: Toujours choisir la dernière version stable (sans suffixe)
Métadonnées du Projet
Structure des Métadonnées
1. Group
Définition: Identifiant de l'organisation ou de l'équipe (convention Maven)
Format: Nom de domaine inversé
Exemples:
com.example # Exemple générique
com.inskillflow # Organisation inskillflow
org.springframework # Spring Framework
Convention: Utiliser votre domaine inversé ou com.example pour les exercices
2. Artifact
Définition: Identifiant unique du projet
Format: Lettres minuscules, tirets pour les espaces
Exemples:
greeting-app
user-management-service
e-commerce-backend
Convention: Nom descriptif en kebab-case
3. Name
Définition: Nom d'affichage du projet
Format: Nom lisible par l'humain
Exemples:
Greeting Application
User Management Service
E-Commerce Backend
4. Description
Définition: Description courte du projet
Exemple:
Application Spring Boot pour gérer les salutations
5. Package Name
Définition: Package Java racine du projet
Format: Automatiquement généré: {group}.\{artifact\}
Exemple:
com.example.greeting
Structure résultante:
src/main/java/com/example/greeting/
├── GreetingApplication.java
├── controller/
├── service/
└── model/
6. Packaging
Choix disponibles:
| Type | Description | Utilisation |
|---|---|---|
| JAR | Java Archive (standalone) | Applications Spring Boot avec serveur embarqué |
| WAR | Web Archive | Déploiement sur serveur externe (Tomcat, etc.) |
Recommandation: JAR (Spring Boot embarque son propre serveur)
Différence:
7. Java Version
Versions supportées par Spring Boot 3.x:
| Version | Support | Recommandation |
|---|---|---|
| Java 17 | LTS | Recommandé |
| Java 21 | LTS | Très récent |
| Java 11 | Ancienne LTS | Non supporté par Spring Boot 3.x |
Note importante: Spring Boot 3.x requiert minimum Java 17
Gestion des Dépendances
Qu'est-ce qu'une Dépendance?
Une dépendance (ou dependency) est une bibliothèque externe que votre projet utilise.
Starters Spring Boot
Spring Boot utilise le concept de "starters" - des dépendances groupées.
Format d'un starter:
spring-boot-starter-{technologie}
Catégories de Dépendances
1. Web
| Starter | Description | Utilisation |
|---|---|---|
| Spring Web | REST APIs, Spring MVC | Applications web REST |
| Spring Reactive Web | WebFlux (réactif) | Applications hautement scalables |
2. SQL (Bases de données relationnelles)
| Starter | Description |
|---|---|
| Spring Data JPA | ORM avec Hibernate |
| JDBC API | Accès SQL bas niveau |
| MyBatis Framework | Mapping SQL/Java |
3. NoSQL
| Starter | Description |
|---|---|
| Spring Data MongoDB | Base de données documents |
| Spring Data Redis | Cache en mémoire |
| Spring Data Elasticsearch | Recherche full-text |
4. Sécurité
| Starter | Description |
|---|---|
| Spring Security | Authentification et autorisation |
| OAuth2 Client | Login social (Google, Facebook) |
| OAuth2 Resource Server | API protégée |
5. SQL Drivers
| Driver | Base de données |
|---|---|
| PostgreSQL Driver | PostgreSQL |
| MySQL Driver | MySQL/MariaDB |
| H2 Database | Base en mémoire (tests) |
| Oracle Driver | Oracle Database |
6. I/O
| Starter | Description |
|---|---|
| Validation | Validation des données (@Valid) |
| Spring Web Services | SOAP Web Services |
| Spring for Apache Kafka | Messaging Kafka |
7. Developer Tools
| Tool | Description | Utilisation |
|---|---|---|
| Spring Boot DevTools | Rechargement automatique | Développement |
| Lombok | Réduction du code boilerplate | Productivité |
| Spring Configuration Processor | Autocomplétion des configs | Développement |
Dépendances pour un Projet REST Simple
Pour une application REST basique, choisissez:
✅ Spring Web
✅ Spring Boot DevTools
Dépendances pour une Application Complète
Pour une application avec base de données:
✅ Spring Web
✅ Spring Data JPA
✅ PostgreSQL Driver (ou autre)
✅ Validation
✅ Spring Boot DevTools
✅ Lombok (optionnel)
Génération et Téléchargement
Options de Génération
Boutons disponibles:
-
EXPLORE (Ctrl + Space)
- Prévisualiser la structure du projet
- Voir le contenu du
pom.xml - Vérifier les fichiers générés
-
SHARE
- Générer un lien partageable
- Partager la configuration avec l'équipe
-
GENERATE (Ctrl + Enter)
- Télécharger le projet en ZIP
- Prêt à être décompressé et importé
Structure du ZIP Généré
greeting-app.zip
└── greeting/
├── .mvn/ # Wrapper Maven
├── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── com/example/greeting/
│ │ │ └── GreetingApplication.java
│ │ └── resources/
│ │ ├── static/ # Fichiers statiques (CSS, JS, images)
│ │ ├── templates/ # Templates (Thymeleaf)
│ │ └── application.properties
│ └── test/
│ └── java/
│ └── com/example/greeting/
│ └── GreetingApplicationTests.java
├── .gitignore
├── mvnw # Maven wrapper (Unix)
├── mvnw.cmd # Maven wrapper (Windows)
├── pom.xml # Configuration Maven
└── HELP.md
Import dans un IDE
Option 1: Visual Studio Code
Étapes:
- Décompresser le ZIP
- VS Code → File → Open Folder
- Sélectionner le dossier
greeting - Attendre l'import Maven automatique
- Extensions requises:
- Extension Pack for Java
- Spring Boot Extension Pack
Option 2: IntelliJ IDEA
Étapes:
- Décompresser le ZIP
- IntelliJ → File → Open
- Sélectionner le dossier
greeting - IntelliJ détecte automatiquement le projet Maven
- Attendre l'indexation
Option 3: Eclipse/Spring Tool Suite (STS)
Étapes:
- Décompresser le ZIP
- Eclipse → File → Import
- Maven → Existing Maven Projects
- Sélectionner le dossier
greeting - Finish
Alternatives à l'Interface Web
1. Spring Initializr dans VS Code
Installation:
- Extension: Spring Initializr Java Support
Utilisation:
- Ctrl + Shift + P
- Taper: "Spring Initializr: Create a Maven Project"
- Suivre les prompts
2. Spring CLI
Installation:
# macOS
brew install spring-boot
# Linux/Windows
# Télécharger depuis: https://docs.spring.io/spring-boot/docs/current/reference/html/getting-started.html#getting-started-installing-the-cli
Utilisation:
spring init \
--dependencies=web,data-jpa,postgresql \
--name=greeting \
--group-id=com.example \
--artifact-id=greeting \
greeting-app
3. API REST de Spring Initializr
URL de base:
https://start.spring.io
Exemple avec curl:
curl https://start.spring.io/starter.zip \
-d dependencies=web,data-jpa \
-d name=greeting \
-d groupId=com.example \
-d artifactId=greeting \
-o greeting.zip
Exercices Pratiques
Exercice 1: Créer un Projet Simple
Objectif: Créer un projet REST simple
Instructions:
- Allez sur https://start.spring.io/
- Configurez:
- Type: Maven
- Java: 17
- Group:
com.example - Artifact:
hello-rest
- Ajoutez: Spring Web
- Générez et téléchargez
- Importez dans VS Code
Exercice 2: Créer un Projet avec Base de Données
Objectif: Créer un projet avec JPA
Instructions:
- Allez sur https://start.spring.io/
- Configurez:
- Type: Maven
- Java: 17
- Group:
com.example - Artifact:
user-manager
- Ajoutez:
- Spring Web
- Spring Data JPA
- PostgreSQL Driver
- Validation
- Générez et explorez le
pom.xml
Exercice 3: Analyser un pom.xml
Objectif: Comprendre les dépendances générées
Instructions:
- Générez un projet avec Spring Web
- Ouvrez le
pom.xml - Identifiez:
- Le parent Spring Boot
- Le starter web
- Le plugin Maven Spring Boot
- Listez toutes les dépendances transitives
Questions de Révision
-
Qu'est-ce que Spring Initializr?
-
Quelle est la différence entre Maven et Gradle?
-
Que signifie "starter" dans Spring Boot?
-
Quelle est la convention pour le Group ID?
-
Pourquoi choisir JAR plutôt que WAR pour Spring Boot?
-
Quelle est la version Java minimale pour Spring Boot 3.x?
-
À quoi sert Spring Boot DevTools?
-
Quelle dépendance est nécessaire pour créer des REST APIs?
Résumé du Chapitre
Points Clés
- Spring Initializr génère rapidement des projets Spring Boot
- Accessible via web, IDE, CLI ou API
- Configuration en 3 sections: Projet, Métadonnées, Dépendances
- Les "starters" groupent des dépendances cohérentes
- JAR est le packaging recommandé pour Spring Boot
- Java 17+ est requis pour Spring Boot 3.x
Bonnes Pratiques
- Utiliser des versions stables de Spring Boot
- Choisir uniquement les dépendances nécessaires
- Suivre les conventions de nommage Maven
- Utiliser DevTools en développement
- Versionner le code dès la création
Prochaines Étapes
Dans le chapitre suivant, nous explorerons en détail:
Chapitre 2: Structure d'un Projet Spring Boot
- Organisation des packages
- Rôle de chaque fichier
- Conventions de nommage
- Architecture en couches