Problème de Timeout REST API dans Spring Boot – Causes et Solutions

 Les erreurs de timeout dans les applications Spring Boot sont très fréquentes en production.

Vous pouvez rencontrer :

  • 504 Gateway Timeout

  • 408 Request Timeout

  • SocketTimeoutException

  • Read timed out

  • Connection timed out

Souvent, l’application fonctionne en local mais échoue en production.

Dans cet article, nous allons voir :

  • Où se produit réellement le timeout

  • Les causes principales

  • Comment configurer correctement les timeouts

  • Les bonnes pratiques pour éviter le problème


1️⃣ Où se produit réellement le timeout ?

Le timeout ne signifie pas toujours que votre code est lent.

Il peut se produire au niveau :

1️⃣ Du client (RestTemplate / WebClient)
2️⃣ Du serveur (Tomcat)
3️⃣ Du reverse proxy (Nginx / Apache)
4️⃣ De l’API Gateway
5️⃣ De la base de données
6️⃣ D’un appel API externe

La première étape consiste à identifier la couche concernée.


2️⃣ Causes fréquentes

🔹 Requêtes base de données lentes

  • Index manquants

  • Jointures complexes

  • Verrous sur tables

🔹 Appels API externes bloquants

  • Service tiers lent

  • Problème réseau

🔹 Saturation du pool de threads

  • Trop de requêtes simultanées

  • Traitement bloquant

🔹 Timeout mal configuré

  • Valeur par défaut trop faible

  • Incohérence entre proxy et backend


3️⃣ Configuration du timeout côté client (RestTemplate)

Exemple :

@Bean public RestTemplate restTemplate() { HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory(); factory.setConnectTimeout(5000); factory.setReadTimeout(5000); return new RestTemplate(factory); }

Toujours configurer :

  • Connect Timeout

  • Read Timeout


4️⃣ Configuration avec WebClient

@Bean public WebClient webClient() { HttpClient httpClient = HttpClient.create() .responseTimeout(Duration.ofSeconds(5)); return WebClient.builder() .clientConnector(new ReactorClientHttpConnector(httpClient)) .build(); }

5️⃣ Configuration côté serveur (Tomcat)

Dans application.yml :

server: connection-timeout: 5s tomcat: max-threads: 200 accept-count: 100

Attention : augmenter les threads sans analyser la charge CPU peut aggraver le problème.


6️⃣ Timeout Nginx / Reverse Proxy

Beaucoup d’erreurs 504 proviennent du proxy.

Exemple configuration Nginx :

proxy_connect_timeout 60s; proxy_read_timeout 60s; proxy_send_timeout 60s;

Si le timeout proxy est inférieur au temps de traitement backend → erreur 504.


7️⃣ Solution avancée : Traitement asynchrone

Si le traitement est long :

Au lieu de :

Client → Traitement long → Réponse

Utiliser :

Client202 Accepted Traitement en arrière-plan Notification ultérieure

Solutions possibles :

  • @Async

  • Kafka

  • Camunda workflow

  • File de messages


8️⃣ Optimisation base de données

✔ Ajouter des index
✔ Utiliser la pagination
✔ Éviter les requêtes N+1
✔ Surveiller les slow queries


9️⃣ Stratégie de diagnostic

  1. Vérifier logs backend

  2. Vérifier logs proxy

  3. Analyser requêtes SQL lentes

  4. Mesurer temps de réponse

  5. Utiliser APM (Prometheus, Grafana)


Conclusion

Les problèmes de timeout REST dans Spring Boot proviennent généralement :

  • D’appels bloquants

  • De requêtes lentes

  • D’une mauvaise configuration des timeouts

  • D’un désalignement proxy/backend

Augmenter le timeout n’est pas toujours la solution.
Il faut identifier la cause racine et optimiser l’architecture.

💼 Support professionnel disponible

Si vous rencontrez des problèmes sur des projets réels liés au développement backend d’entreprise ou à l’automatisation des workflows, je propose des services de conseil payants, de débogage en production, de support projet et de formations ciblées.

Les technologies couvertes incluent Java, Spring Boot, PL/SQL, Azure, ainsi que l’automatisation des workflows (jBPM, Camunda BPM, RHPAM).

📧 Contact: ishikhanirankari@gmail.com | info@realtechnologiesindia.com

🌐 Website: IT Trainings | Digital lectern | Digital rostrum | Digital metal podium     

Comments

Popular posts from this blog

Scopes of Signal in jBPM

OOPs Concepts in Java | English | Object Oriented Programming Explained

jBPM Installation Guide: Step by Step Setup