CHAPITRE 4 : AUTO-CONFIGURATION ET STRUCTURE DU PROJET
Spring Boot fait beaucoup de choses sans qu'on le lui demande. Comprendre ce
mecanisme evite de subir le framework.
1. Comment fonctionne l'auto-configuration
Au demarrage, Spring Boot examine le classpath, l'ensemble des bibliotheques
disponibles, et applique des regles conditionnelles.
S'il trouve…
Alors il…
Tomcat et Spring MVC
demarre un serveur web sur le port 8080
Un pilote de base de donnees
configure une source de donnees
Spring Data JPA
active Hibernate et les depots
Jackson
convertit automatiquement les objets en JSON
Le principe cle : ces configurations sont conditionnelles. Des que vous definissez
la votre, celle de Spring Boot s'efface. Vous n'avez donc jamais a « lutter » contre elle.
2. Voir ce qui a ete configure
# dans application.properties
debug=true
Au demarrage, Spring Boot affiche alors un rapport : les configurations appliquees
(Positive matches) et celles qui ne l'ont pas ete, avec la raison (Negative matches).
C'est precieux quand quelque chose ne se declenche pas comme prevu.
3. Organiser son projet
Spring n'impose pas de structure, mais l'usage s'est stabilise autour d'un decoupage en couches :
com.pandacodeur.gestionetudiants/
├── GestionEtudiantsApplication.java
├── controller/ recoit les requetes HTTP
├── service/ la logique metier
├── repository/ l'acces aux donnees
├── model/ les entites
├── dto/ les objets echanges avec l'exterieur
└── config/ la configuration
Le role de chaque couche
Couche
Responsabilite
Ne doit pas
Controller
Lire la requete, renvoyer la reponse
Contenir de la logique metier
Service
Appliquer les regles de gestion
Connaitre HTTP
Repository
Lire et ecrire en base
Decider quoi que ce soit
La regle la plus utile : un controleur mince, un service epais. Si un controleur
depasse quelques lignes par methode, la logique est probablement au mauvais endroit.
4. Le fichier application.properties
# serveur
server.port=8081
# base de donnees
spring.datasource.url=jdbc:mysql://localhost:3306/ecole
spring.datasource.username=root
spring.datasource.password=secret
# JPA
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true
# journalisation
logging.level.org.springframework.web=DEBUG
Les deux formats sont equivalents. YAML evite les repetitions, mais l'indentation y est
significative : une espace de trop et la propriete n'est plus lue.
Pour un groupe de proprietes, une classe dediee est plus lisible :
@ConfigurationProperties(prefix = "app")
@Component
public class AppProperties {
private String nomEtablissement;
private int nombreMaxEtudiants;
// getters et setters
}
A retenir
L'auto-configuration s'appuie sur les bibliotheques presentes
Elle s'efface des que vous definissez votre propre configuration
debug=true affiche ce qui a ete applique, et pourquoi
Decoupez en couches : controller, service, repository
Exercices d'application
Exercice 1. Changer le portFaites demarrer votre application sur le port 9090 via application.properties, puis verifiez dans la console.
Exercice 2. Lire le rapportActivez debug=true, relancez et cherchez DataSourceAutoConfiguration dans les Negative matches. Pourquoi n'est-elle pas appliquee ?
Exercice 3. Une propriete maisonAjoutez app.nom-etablissement=PandaCodeur et affichez-la dans une route /etablissement avec @Value.
Cherchez avant de regarder la solution : c'est en butant sur les difficultes que l'on progresse.
Questions / Réponses
Aucune question. Soyez le premier à poser une question.