Maison  >  Article  >  base de données  >  Comment corriger les erreurs « Échec du lien de communication » lors de la connexion à MySQL dans une application Spring Boot Dockerisée ?

Comment corriger les erreurs « Échec du lien de communication » lors de la connexion à MySQL dans une application Spring Boot Dockerisée ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-02 05:38:29182parcourir

How to Fix “Communications Link Failure” Errors When Connecting to MySQL in a Dockerized Spring Boot Application?

Échec du lien de communication dans Spring Boot, MySQL, Docker et Hibernate

Problème :
Lors de l'exécution une application Spring Boot avec Hibernate et MySQL utilisant Docker Compose, une erreur se produit avec le message suivant :

Communications link failure
java.net.ConnectException: Connection refused

Détails :
L'erreur se produit lorsque l'application tente d'établir un connexion à la base de données MySQL. L'URL de connexion dans jdbc:mysql://localhost/database fait référence à l'hôte local, ce qui n'est pas la bonne adresse dans le conteneur Docker.

Solution :
Pour résoudre ce problème problème, l'URL de connexion dans la connexion JDBC et la configuration Spring Boot (application.properties) doivent être mises à jour pour pointer vers l'adresse du conteneur MySQL.

Connexion JDBC :

<code class="java">private Connection createConnection() throws SQLException {
    DriverManager.registerDriver(new com.mysql.jdbc.Driver());
    String mysqlUrl = "jdbc:mysql://docker-mysql:3306/database?autoReconnect=true&useSSL=false";
    Connection connection = DriverManager.getConnection(mysqlUrl, "root", "root");
    return connection;
}</code>

Configuration de Spring Boot (application.properties) :

<code class="properties">spring.datasource.url=jdbc:mysql://docker-mysql:3306/database?autoReconnect=true&useSSL=false
spring.datasource.username=root
spring.datasource.password=root</code>

Configuration de Docker Compose (docker-compose.yml) :
Assurez-vous que la configuration Docker Compose définit correctement le mappage de port pour le conteneur MySQL :

<code class="yaml">services:
  docker-mysql:
    image: mysql:5.7
    ports:
      - 3307:3306</code>

et que le conteneur d'application dépend du conteneur MySQL :

<code class="yaml">app:
    image: app:latest
    ports:
      - 8091:8091
    depends_on:
      - docker-mysql</code>

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn