Spring Boot

Framework Java entreprise avec auto-configuration - serveurs integres, zero XML, pret pour la production des le premier jour

TL;DR

En bref : Spring Boot est le framework Java opinionné pour les applications de production - auto-configuration et serveurs embarqués signifient zéro XML, juste exécuter.

Points forts :

  • Auto-configuration - valeurs par défaut sensées, pas de boilerplate
  • Serveurs embarqués - Tomcat/Jetty intégrés, pas de déploiement nécessaire
  • Écosystème Spring - Security, Data, intégration Cloud
  • Prêt pour la production - health checks, métriques, configuration externalisée

Core Concepts

Concept 1: Auto-Configuration

Spring Boot configure les beans automatiquement selon le classpath :

// Add spring-boot-starter-data-jpa to pom.xml
// Spring Boot auto-configures:
// - DataSource (from application.properties)
// - EntityManagerFactory
// - TransactionManager

@Repository
public interface UserRepository extends JpaRepository<User, Long> {
    // That's it - CRUD methods are auto-generated
}

Concept 2: Annotations-Driven

Les contrôleurs et services utilisent des annotations simples :

@RestController
@RequestMapping("/api/users")
public class UserController {

    @Autowired
    private UserService userService;

    @GetMapping
    public List<User> getAll() {
        return userService.findAll();
    }

    @GetMapping("/{id}")
    public User getById(@PathVariable Long id) {
        return userService.findById(id);
    }

    @PostMapping
    public User create(@RequestBody @Valid User user) {
        return userService.save(user);
    }
}

Concept 3: Externalized Configuration

application.properties (ou .yml) pilote tout :

# Server
server.port=8080

# Database
spring.datasource.url=jdbc:postgresql://localhost:5432/mydb
spring.datasource.username=${DB_USER}
spring.datasource.password=${DB_PASS}

# JPA
spring.jpa.hibernate.ddl-auto=validate
spring.jpa.show-sql=true

Quick Start

Create Project

Allez sur start.spring.io :

  • Project : Maven
  • Language : Java
  • Dependencies : Spring Web
  • Générer et décompresser

Create Controller

// src/main/java/com/example/demo/HelloController.java
package com.example.demo;

import org.springframework.web.bind.annotation.*;

@RestController
public class HelloController {
    @GetMapping("/")
    public String hello() {
        return "Hello Spring Boot!";
    }
}

Run

./mvnw spring-boot:run
# Open http://localhost:8080

Gotchas

Constructor injection over @Autowired

// ❌ Field injection - harder to test
@Service
public class UserService {
    @Autowired
    private UserRepository repo;
}

// ✅ Constructor injection - clean and testable
@Service
public class UserService {
    private final UserRepository repo;

    public UserService(UserRepository repo) {
        this.repo = repo;
    }
}

Validation requires @Valid

// ❌ Validation won't run
@PostMapping
public User create(@RequestBody User user) { ... }

// ✅ @Valid triggers validation
@PostMapping
public User create(@RequestBody @Valid User user) { ... }

// In your DTO:
public class User {
    @NotBlank
    private String name;

    @Email
    private String email;
}

Profile-specific config

# application.properties (default)
spring.profiles.active=dev

# application-dev.properties
spring.datasource.url=jdbc:h2:mem:testdb

# application-prod.properties
spring.datasource.url=jdbc:postgresql://prod-db:5432/app

When to Use

Idéal pour :

  • Applications d’entreprise
  • Architecture microservices
  • Équipes avec expérience Java
  • Projets nécessitant l’écosystème Spring

Moins adapté pour :

  • Scripts simples (trop lourd)
  • Serverless (temps de démarrage à froid)
  • Équipes nouvelles en Java

Comparaison :

FonctionnalitéSpring BootQuarkusMicronaut
DémarrageLentRapideRapide
MémoireÉlevéeFaibleFaible
ÉcosystèmeÉnormeEn croissanceEn croissance
NativeGraalVMGraalVMGraalVM

Next Steps

Cheatsheet

PatternCode
Contrôleur REST@RestController
Route GET@GetMapping("/path")
Route POST@PostMapping("/path")
Variable de chemin@PathVariable Long id
Paramètre query@RequestParam String name
Corps de requête@RequestBody User user
Validation@Valid @RequestBody User user
Bean service@Service
Repository@Repository
Exécuter./mvnw spring-boot:run