Quiz: Premiers Pas avec Spring Boot
Testez vos connaissances sur la création et la structure d'un projet Spring Boot.
30 questions - Cliquez sur chaque question pour révéler la réponse.
Questions 1-10: Spring Initializr et Structure
Question 1: Qu'est-ce que Spring Initializr?
Réponse: Spring Initializr est un outil web (start.spring.io) qui génère la structure de base d'un projet Spring Boot:
- Choix du type de projet (Maven/Gradle)
- Version de Java et Spring Boot
- Dépendances initiales
- Métadonnées du projet (groupId, artifactId)
Question 2: Quelle est la structure standard d'un projet Spring Boot?
Réponse:
src/
├── main/
│ ├── java/
│ │ └── com/example/demo/
│ │ └── DemoApplication.java
│ └── resources/
│ ├── application.properties
│ ├── static/
│ └── templates/
└── test/
└── java/
pom.xml
Question 3: À quoi sert le fichier pom.xml?
Réponse: Le fichier pom.xml (Project Object Model) définit:
- Métadonnées du projet (groupId, artifactId, version)
- Dépendances
- Plugins Maven
- Configuration de build
- Parent Spring Boot (
spring-boot-starter-parent)
Question 4: Qu'est-ce que spring-boot-starter-parent?
Réponse: Un parent Maven qui fournit:
- Gestion des versions de dépendances
- Configuration par défaut des plugins
- Encodage UTF-8
- Version Java configurée
- Profils de build
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.2.0</version>
</parent>
Question 5: Qu'est-ce qu'un starter Spring Boot?
Réponse: Un starter est un ensemble de dépendances pré-configurées pour un usage spécifique:
| Starter | Usage |
|---|---|
spring-boot-starter-web | API REST |
spring-boot-starter-data-jpa | Base de données |
spring-boot-starter-security | Sécurité |
spring-boot-starter-test | Tests |
Question 6: Où placer le fichier application.properties?
Réponse: Dans src/main/resources/application.properties ou application.yml.
Ce fichier contient la configuration de l'application (port, base de données, etc.).
Question 7: Quelle est la différence entre application.properties et application.yml?
Réponse:
# application.properties
server.port=8080
spring.datasource.url=jdbc:postgresql://localhost/db
# application.yml
server:
port: 8080
spring:
datasource:
url: jdbc:postgresql://localhost/db
YAML est plus lisible pour les configurations hiérarchiques.
Question 8: À quoi sert le dossier static/?
Réponse: Le dossier src/main/resources/static/ contient les fichiers statiques servis directement:
- CSS
- JavaScript
- Images
- Fichiers HTML statiques
Accessible via http://localhost:8080/fichier.css
Question 9: À quoi sert le dossier templates/?
Réponse: Le dossier src/main/resources/templates/ contient les templates côté serveur:
- Thymeleaf (.html)
- FreeMarker (.ftl)
- Mustache (.mustache)
Utilisé pour les applications web avec rendu serveur.
Question 10: Comment exécuter une application Spring Boot?
Réponse:
# Avec Maven
mvn spring-boot:run
# Ou en compilant le JAR
mvn clean package
java -jar target/app.jar
# Depuis l'IDE
# Exécuter la classe main
Questions 11-20: Classe Principale et Annotations
Question 11: Que contient la classe principale?
Réponse:
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
C'est le point d'entrée qui démarre le contexte Spring.
Question 12: Que fait @SpringBootApplication?
Réponse: @SpringBootApplication combine trois annotations:
@Configuration: classe de configuration@EnableAutoConfiguration: auto-configuration Spring Boot@ComponentScan: scan des composants
Question 13: Qu'est-ce que l'auto-configuration?
Réponse: Spring Boot configure automatiquement les beans selon:
- Les dépendances présentes
- Les propriétés définies
- Les beans existants
Exemple: ajouter spring-boot-starter-data-jpa configure automatiquement un DataSource.
Question 14: Qu'est-ce que @RestController?
Réponse: Annotation combinant:
@Controller: composant web@ResponseBody: retourne du JSON/XML
@RestController
public class UserController {
@GetMapping("/users")
public List<User> getAll() {
return userService.findAll();
}
}
Question 15: Quelles sont les annotations de mapping HTTP?
Réponse:
| Annotation | Méthode HTTP |
|---|---|
@GetMapping | GET |
@PostMapping | POST |
@PutMapping | PUT |
@DeleteMapping | DELETE |
@PatchMapping | PATCH |
@RequestMapping | Toutes (configurable) |
Question 16: Comment récupérer un paramètre d'URL?
Réponse:
// Path variable: /users/123
@GetMapping("/users/{id}")
public User getUser(@PathVariable Long id) {
return userService.findById(id);
}
// Query param: /users?name=John
@GetMapping("/users")
public List<User> search(@RequestParam String name) {
return userService.findByName(name);
}
Question 17: Comment récupérer le corps d'une requête?
Réponse:
@PostMapping("/users")
public User create(@RequestBody UserRequest request) {
return userService.create(request);
}
@RequestBody désérialise le JSON en objet Java.
Question 18: À quoi servent @Component, @Service, @Repository?
Réponse: Ce sont des stéréotypes Spring qui marquent les classes comme beans:
| Annotation | Usage |
|---|---|
@Component | Bean générique |
@Service | Logique métier |
@Repository | Accès données |
@Controller | Couche web |
Tous sont des variantes de @Component.
Question 19: Qu'est-ce que @Configuration et @Bean?
Réponse:
@Configuration
public class AppConfig {
@Bean
public RestTemplate restTemplate() {
return new RestTemplate();
}
}
@Configuration: classe de configuration@Bean: méthode qui produit un bean
Question 20: Comment injecter une dépendance?
Réponse:
@Service
public class UserService {
private final UserRepository userRepository;
// Injection par constructeur (recommandé)
public UserService(UserRepository userRepository) {
this.userRepository = userRepository;
}
}
Questions 21-30: Configuration et Repositories
Question 21: Comment définir le port du serveur?
Réponse:
# application.properties
server.port=9090
# application.yml
server:
port: 9090
Par défaut: 8080
Question 22: Comment utiliser des profils?
Réponse:
# application.yml (commun)
spring:
profiles:
active: dev
# application-dev.yml
server:
port: 8080
# application-prod.yml
server:
port: 80
Activation: --spring.profiles.active=prod
Question 23: Comment lire une propriété de configuration?
Réponse:
@Value("${app.name}")
private String appName;
@Value("${app.timeout:5000}") // Valeur par défaut
private int timeout;
Question 24: Qu'est-ce que JpaRepository?
Réponse: Interface Spring Data JPA qui fournit des méthodes CRUD:
public interface UserRepository extends JpaRepository<User, Long> {
// Méthodes héritées: save, findById, findAll, delete, count...
}
Question 25: Comment créer une entité JPA?
Réponse:
@Entity
@Table(name = "users")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(nullable = false)
private String name;
private String email;
// Getters, setters
}
Question 26: Comment configurer H2 en mémoire?
Réponse:
spring:
datasource:
url: jdbc:h2:mem:testdb
driver-class-name: org.h2.Driver
h2:
console:
enabled: true # Console: /h2-console
Parfait pour le développement et les tests.
Question 27: Comment Spring Data génère-t-il les requêtes?
Réponse: Par le nom de la méthode:
List<User> findByName(String name);
// SELECT * FROM users WHERE name = ?
List<User> findByEmailContaining(String email);
// SELECT * FROM users WHERE email LIKE '%?%'
List<User> findByAgeGreaterThanOrderByNameAsc(int age);
// SELECT * FROM users WHERE age > ? ORDER BY name ASC
Question 28: Comment démarrer l'application avec des données?
Réponse:
@Component
public class DataInitializer implements CommandLineRunner {
private final UserRepository repository;
@Override
public void run(String... args) {
repository.save(new User("Admin", "admin@example.com"));
}
}
Ou avec src/main/resources/data.sql.
Question 29: Comment voir les requêtes SQL exécutées?
Réponse:
spring:
jpa:
show-sql: true
properties:
hibernate:
format_sql: true
logging:
level:
org.hibernate.SQL: DEBUG
org.hibernate.orm.jdbc.bind: TRACE
Question 30: Comment créer un JAR exécutable?
Réponse:
mvn clean package
# Résultat: target/app-0.0.1-SNAPSHOT.jar
java -jar target/app-0.0.1-SNAPSHOT.jar
Le JAR contient l'application et un serveur Tomcat embarqué.
Score
| Score | Niveau |
|---|---|
| 27-30 | Excellent - Fondamentaux maîtrisés |
| 21-26 | Bien - Quelques révisions |
| 15-20 | Moyen - Relisez les chapitres |
| Moins de 15 | À revoir |