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 MVCdemarre un serveur web sur le port 8080
Un pilote de base de donneesconfigure une source de donnees
Spring Data JPAactive Hibernate et les depots
Jacksonconvertit 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

CoucheResponsabiliteNe doit pas
ControllerLire la requete, renvoyer la reponseContenir de la logique metier
ServiceAppliquer les regles de gestionConnaitre HTTP
RepositoryLire et ecrire en baseDecider 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

La variante YAML

server:
  port: 8081

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/ecole
    username: root
  jpa:
    show-sql: true

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.

5. Lire une propriete dans le code

@Value("${app.nom-etablissement}")
private String nomEtablissement;

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.
★ ★ ★ ★ ★
2 votes. Moyenne 5 sur 5.

Ajouter un commentaire

Anti-spam