Aller au contenu principal

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:

StarterUsage
spring-boot-starter-webAPI REST
spring-boot-starter-data-jpaBase de données
spring-boot-starter-securitySécurité
spring-boot-starter-testTests

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:

AnnotationMéthode HTTP
@GetMappingGET
@PostMappingPOST
@PutMappingPUT
@DeleteMappingDELETE
@PatchMappingPATCH
@RequestMappingToutes (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:

AnnotationUsage
@ComponentBean générique
@ServiceLogique métier
@RepositoryAccès données
@ControllerCouche 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​

ScoreNiveau
27-30Excellent - Fondamentaux maîtrisés
21-26Bien - Quelques révisions
15-20Moyen - Relisez les chapitres
Moins de 15À revoir

Retour au Module 2