
Spring Boot : Le guide de référence complet
Maîtrisez Spring Boot avec ce guide complet pour développeurs Java. Des bases à WebFlux/Microservices : config, API REST, Data JPA, Sécurité, tests, déploiement Docker. La référence ultime pour vos applications.
Table des matières
- Introduction et fondamentaux de Spring Boot
- Introduction à l'écosystème Spring et Spring Boot
- Historique et évolution du framework Spring
- Problématiques résolues par Spring (inversion de contrôle, injection de dépendances)
- Présentation de Spring Boot : objectifs et philosophie
- Avantages de Spring Boot (auto-configuration, starters, opinionated defaults)
- Positionnement de Spring Boot dans l'écosystème Java EE / Jakarta EE
- Aperçu des modules principaux de l'écosystème Spring (Core, MVC, Data, Security, etc.)
- Mise en place de l'environnement et première application
- Prérequis : Installation de Java (JDK) et d'un outil de build (Maven/Gradle)
- Choix et configuration d'un IDE (IntelliJ IDEA, VS Code, Eclipse)
- Utilisation de Spring Initializr (web ou via IDE) pour générer un projet
- Structure d'un projet Spring Boot typique
- Anatomie de la classe principale `@SpringBootApplication`
- Création d'un premier contrôleur REST simple (`@RestController`, `@GetMapping`)
- Lancement de l'application (via IDE, Maven/Gradle)
- Accéder à l'application via un navigateur ou un outil comme curl/Postman
- Les concepts clés de Spring Boot
- Les starters Spring Boot (`spring-boot-starter-*`)
- Le mécanisme d'auto-configuration (`@EnableAutoConfiguration`)
- Comprendre les configurations conditionnelles (`@ConditionalOn...`)
- Le conteneur IoC de Spring et la gestion des beans (`@Component`, `@Service`, `@Repository`, `@Configuration`)
- L'injection de dépendances (`@Autowired`, injection par constructeur, setter, champ)
- Le cycle de vie des beans Spring
- Spring Boot et les serveurs embarqués (Tomcat, Jetty, Undertow)
- Configuration et gestion des propriétés
- Le fichier `application.properties` ou `application.yml`
- Syntaxe YAML vs Properties
- Accéder aux propriétés via `@Value`
- Liaison de type sécurisé avec `@ConfigurationProperties`
- Gestion des profils (`spring.profiles.active`, `@Profile`)
- Fichiers de configuration spécifiques aux profils (application-{profile}.properties)
- Priorité des sources de configuration (variables d'environnement, arguments de ligne de commande, etc.)
- Configuration externalisée avancée (Spring Cloud Config - introduction)
- Introduction à l'écosystème Spring et Spring Boot
- Développement d'applications web avec Spring Boot
- Création d'API RESTful avec Spring Web MVC
- Principes fondamentaux de REST (ressources, verbes HTTP, statelessness)
- Utilisation de `@RestController` et des annotations de mapping (`@RequestMapping`, `@GetMapping`, `@PostMapping`, `@PutMapping`, `@DeleteMapping`, `@PatchMapping`)
- Gestion des paramètres de requête (`@RequestParam`, `@PathVariable`, `@RequestHeader`)
- Gestion du corps de la requête (`@RequestBody`)
- Gestion des réponses (`ResponseEntity`, codes de statut HTTP)
- Sérialisation et désérialisation JSON/XML (Jackson/JAXB)
- Utilisation des DTO (Data Transfer Objects)
- Gestion des versions d'API
- Documentation d'API avec OpenAPI/Swagger (`springdoc-openapi-ui`)
- Développement web traditionnel avec Spring MVC
- Introduction au modèle MVC (Modèle-Vue-Contrôleur)
- Utilisation de `@Controller` (différence avec `@RestController`)
- Transmission de données à la vue (`Model`, `ModelAndView`)
- Gestion des formulaires (`@ModelAttribute`)
- Redirections et forwards
- Gestion des sessions et des cookies
- Internationalisation (i18n) et localisation (L10n)
- Gestion des vues et moteurs de templates
- Introduction aux moteurs de templates côté serveur
- Intégration de Thymeleaf (`spring-boot-starter-thymeleaf`)
- Syntaxe de base de Thymeleaf (expressions, itérations, conditions)
- Layouts et fragments avec Thymeleaf Layout Dialect
- Intégration avec d'autres moteurs (Freemarker, Mustache - aperçu)
- Servir du contenu statique (CSS, JavaScript, images)
- Intégration avec WebJars pour les dépendances frontend
- Validation et gestion des erreurs
- Validation des données d'entrée avec Bean Validation (JSR 380)
- Annotations de validation (`@NotNull`, `@Size`, `@Pattern`, etc.)
- Validation dans les contrôleurs (`@Valid`, `BindingResult`)
- Création de contraintes de validation personnalisées
- Gestion globale des exceptions avec `@ControllerAdvice` et `@ExceptionHandler`
- Personnalisation des réponses d'erreur
- Gestion des erreurs spécifiques à Spring Boot (page d'erreur Whitelabel)
- Création d'API RESTful avec Spring Web MVC
- Accès et persistance des données
- Introduction à Spring Data
- Utilisation de Spring Data JPA avec des bases relationnelles
- Configuration de la source de données (`DataSource`)
- Intégration avec Hibernate (implémentation JPA par défaut)
- Définition des entités JPA (`@Entity`, `@Id`, `@GeneratedValue`, etc.)
- Mapping des relations (`@OneToOne`, `@OneToMany`, `@ManyToOne`, `@ManyToMany`)
- Création d'interfaces Repository (`JpaRepository`, `CrudRepository`)
- Méthodes de requête dérivées (Query Methods)
- Requêtes personnalisées avec `@Query` (JPQL et SQL natif)
- Pagination et tri (`Pageable`, `Sort`)
- Projections Spring Data
- Audit JPA (`@CreatedDate`, `@LastModifiedDate`, etc.)
- Utilisation de Spring Data JDBC
- Intégration avec des bases de données NoSQL
- Introduction aux bases NoSQL (Document, Clé-Valeur, Colonne, Graphe)
- Spring Data MongoDB : configuration et utilisation
- Mapping de documents (`@Document`, `@Id`)
- Utilisation de `MongoRepository` et `MongoTemplate`
- Spring Data Redis : configuration et cas d'usage (cache, sessions)
- Utilisation de `RedisRepository` et `RedisTemplate`
- Aperçu d'autres intégrations (Cassandra, Neo4j, Elasticsearch)
- Transactions et gestion de la concurrence
- Concepts ACID et gestion transactionnelle
- Gestion déclarative des transactions avec `@Transactional`
- Propagation des transactions (`Propagation`)
- Niveaux d'isolation (`Isolation`)
- Gestion programmatique des transactions (`TransactionTemplate`, `PlatformTransactionManager`)
- Verrouillage optimiste et pessimiste avec JPA (`@Version`)
- Gestion des transactions distribuées (JTA - aperçu)
- Migration de base de données avec Flyway ou Liquibase
- Importance de la gestion des schémas de base de données
- Intégration de Flyway avec Spring Boot
- Structure des scripts de migration SQL (convention de nommage)
- Intégration de Liquibase avec Spring Boot
- Format des 'changelogs' Liquibase (XML, YAML, JSON, SQL)
- Exécution automatique des migrations au démarrage
- Bonnes pratiques pour les migrations de base de données
- Sécurisation des applications Spring Boot
- Introduction à Spring Security
- Principes fondamentaux de la sécurité (authentification, autorisation, protection CSRF, etc.)
- Architecture de Spring Security (filtres, contexte de sécurité)
- Intégration de `spring-boot-starter-security`
- Configuration de base par défaut (formulaire de login, utilisateur en mémoire)
- Personnalisation de la configuration de sécurité (`WebSecurityConfigurerAdapter` ou `SecurityFilterChain` bean)
- Mécanismes d'authentification
- Authentification basée sur un formulaire (Form Login)
- Authentification HTTP Basic
- Authentification basée sur une base de données (JDBC/JPA)
- Implémentation de `UserDetailsService`
- Gestion des mots de passe (encodage avec `PasswordEncoder` - bcrypt)
- Authentification via LDAP
- Authentification via OAuth2 / OpenID Connect (connexion via Google, Facebook, etc.)
- Authentification multi-facteurs (MFA - concepts et intégration)
- Gestion des autorisations
- Autorisation basée sur les rôles (`hasRole`, `hasAnyRole`)
- Autorisation basée sur les permissions/autorités (`hasAuthority`)
- Configuration des règles d'accès via `HttpSecurity` (antMatchers, mvcMatchers)
- Sécurité au niveau des méthodes avec `@PreAuthorize`, `@PostAuthorize`, `@Secured`, `@RolesAllowed`
- Utilisation des expressions SpEL (Spring Expression Language) pour des règles complexes
- Gestion des permissions fines (Access Control Lists - ACL)
- Sécurité des API REST
- Désactivation de la protection CSRF pour les API stateless
- Sécurisation avec JWT (JSON Web Tokens)
- Génération et validation des tokens JWT
- Intégration de JWT avec Spring Security (filtres d'authentification)
- Gestion du rafraîchissement des tokens (refresh tokens)
- Sécurisation avec OAuth2 (Resource Server)
- Validation des tokens OAuth2 (introspection, JWK)
- Utilisation de API Keys
- Bonnes pratiques de sécurité et sujets avancés
- Protection contre les attaques courantes (XSS, CSRF, Injection SQL)
- Configuration de HTTPS/SSL
- Gestion des en-têtes de sécurité (Content Security Policy, HSTS, X-Frame-Options)
- Sécurité des mots de passe (stockage, politiques)
- Gestion des secrets et clés (Vault, AWS Secrets Manager - introduction)
- Audit de sécurité et logging
- Tests de sécurité avec Spring Security Test
- Introduction à Spring Security
- Préparation à la production et exploitation
- Tests dans Spring Boot
- Importance et types de tests (unitaires, intégration, end-to-end)
- Utilisation de `spring-boot-starter-test` (JUnit 5, Mockito, AssertJ, Spring Test)
- Tests unitaires de composants Spring (services, repositories)
- Utilisation de Mockito pour mocker les dépendances (`@MockBean`)
- Tests d'intégration avec `@SpringBootTest`
- Tests des contrôleurs web avec `MockMvc`
- Tests des clients REST avec `RestTemplate` ou `WebClient` (`@RestClientTest`)
- Tests de la couche persistance (`@DataJpaTest`, `@DataJdbcTest`, `@DataMongoTest`)
- Utilisation de bases de données en mémoire (H2) ou Testcontainers pour les tests d'intégration
- Tests de configuration avec `@TestPropertySource`
- Tests des slices (couches spécifiques) de l'application
- Spring Boot Actuator : surveillance et métriques
- Introduction à Spring Boot Actuator (`spring-boot-starter-actuator`)
- Configuration des endpoints Actuator (exposition, sécurité)
- Endpoints courants (`health`, `info`, `metrics`, `env`, `loggers`, `beans`, `mappings`)
- Personnalisation de l'endpoint `/info`
- Vérifications de santé (`HealthIndicator` personnalisés)
- Collecte et exposition de métriques (Micrometer)
- Intégration avec des systèmes de monitoring (Prometheus, Grafana, Datadog)
- Suivi distribué (Distributed Tracing) avec Spring Cloud Sleuth / Micrometer Tracing (introduction)
- Accès aux endpoints via HTTP ou JMX
- Packaging et déploiement d'applications
- Création de JAR exécutables (fat JARs)
- Création de WAR traditionnels pour déploiement sur serveur d'applications externe
- Optimisation de la taille et du démarrage (layers Maven/Gradle, AOT, GraalVM Native Image - introduction)
- Déploiement simple sur une machine virtuelle
- Gestion des processus (systemd, supervisor)
- Déploiement sur des plateformes Cloud (PaaS comme Heroku, Cloud Foundry)
- Déploiement sur AWS, GCP, Azure (concepts généraux)
- Intégration avec Docker et conteneurisation
- Introduction aux conteneurs et à Docker
- Ecriture d'un `Dockerfile` pour une application Spring Boot
- Bonnes pratiques pour la création d'images Docker Java (multi-stage builds, JRE vs JDK)
- Utilisation des plugins Maven/Gradle pour construire des images Docker (Jib, Spring Boot Build Plugin)
- Gestion de la configuration dans les conteneurs (variables d'environnement, volumes)
- Orchestration de conteneurs avec Docker Compose (pour le développement et les tests)
- Introduction à Kubernetes pour le déploiement en production (concepts)
- Logging et gestion des logs
- Frameworks de logging supportés (Logback, Log4j2, JUL)
- Configuration du logging via `application.properties`/`yml`
- Configuration avancée via fichiers dédiés (logback-spring.xml, log4j2-spring.xml)
- Niveaux de log et gestion dynamique via Actuator
- Formatage des logs (patterns, JSON)
- Appenders (Console, File, RollingFile)
- Logging structuré pour l'agrégation centralisée (ELK stack, Splunk)
- Utilisation de MDC (Mapped Diagnostic Context) pour le suivi des requêtes
- Tests dans Spring Boot
- Sujets avancés et écosystème Spring
- Programmation asynchrone et réactive avec Spring WebFlux
- Introduction à la programmation réactive (manifeste réactif)
- Project Reactor : `Mono` et `Flux`
- Spring WebFlux : alternative réactive à Spring MVC
- Création de contrôleurs réactifs (annotation-based et functional endpoints)
- Utilisation de `WebClient` pour les appels HTTP réactifs
- Accès aux données réactif (Spring Data R2DBC, MongoDB Reactive, Redis Reactive)
- Server-Sent Events (SSE)
- WebSockets avec Spring
- Quand choisir WebFlux vs Web MVC ?
- Méthodes asynchrones avec `@Async` et `CompletableFuture` (alternative non-réactive)
- Intégration de systèmes de messagerie (Messaging)
- Concepts de messagerie (point-à-point, publish-subscribe)
- Spring JMS (`spring-boot-starter-activemq`, `spring-boot-starter-artemis`)
- Envoi et réception de messages avec `JmsTemplate` et `@JmsListener`
- Spring AMQP (`spring-boot-starter-amqp` pour RabbitMQ)
- Envoi et réception de messages avec `RabbitTemplate` et `@RabbitListener`
- Spring for Apache Kafka (`spring-kafka`)
- Production et consommation de messages Kafka (`KafkaTemplate`, `@KafkaListener`)
- Spring Cloud Stream (abstraction pour les systèmes de messagerie - introduction)
- Développement de microservices avec Spring Cloud (Introduction)
- Principes de l'architecture microservices
- Rôle de Spring Cloud dans l'écosystème microservices
- Configuration centralisée avec Spring Cloud Config Server
- Découverte de services (Service Discovery) avec Eureka ou Consul
- Appels inter-services avec des clients REST déclaratifs (OpenFeign)
- Tolérance aux pannes avec Resilience4j (Circuit Breaker)
- Passerelle d'API (API Gateway) avec Spring Cloud Gateway
- Suivi distribué avec Micrometer Tracing (anciennement Spring Cloud Sleuth) et Zipkin/Jaeger
- Mise en cache (Caching)
- Principes et avantages de la mise en cache
- Abstraction de cache de Spring (`@EnableCaching`)
- Annotations de cache (`@Cacheable`, `@CachePut`, `@CacheEvict`, `@Caching`)
- Fournisseurs de cache supportés (EhCache, Caffeine, Redis, Hazelcast)
- Configuration d'un gestionnaire de cache (`CacheManager`)
- Stratégies de cache et invalidation
- Mise en cache conditionnelle
- Tâches planifiées et traitement par lots
- Planification de tâches avec `@Scheduled` (`@EnableScheduling`)
- Configuration des pools de threads pour les tâches planifiées
- Introduction à Spring Batch (`spring-boot-starter-batch`)
- Concepts clés de Spring Batch (Job, Step, ItemReader, ItemProcessor, ItemWriter)
- Configuration et lancement de jobs Batch
- Gestion de l'état et redémarrage des jobs (JobRepository)
- Cas d'usage typiques du traitement par lots
- Extensibilité et personnalisation avancée
- Création de ses propres starters Spring Boot
- Création de ses propres auto-configurations
- Personnalisation du contexte d'application Spring (`ApplicationContextInitializer`, `EnvironmentPostProcessor`)
- Utilisation des événements Spring (`ApplicationEvent`, `@EventListener`)
- Programmation orientée aspect (AOP) avec Spring AOP
- Intégration avec d'autres bibliothèques et frameworks Java
- Migration et perspectives
- Programmation asynchrone et réactive avec Spring WebFlux