Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

O Spring Boot não pode se conectar ao MySQL e sai no Docker/Docker compose


Você está passando o DATABASE_HOST , DATABASE_PORT , DATABASE_NAME , DATABASE_USER e DATABASE_PASSWORD mas você não o está usando dentro do seu aplicativo.

Atualize suas propriedades assim. (Melhor se você criar um perfil para que seu aplicativo seja executado fora do docker)
spring.datasource.url=jdbc:mysql://${DATABASE_HOST}:${DATABASE_PORT}/${DATABASE_NAME}?autoReconnect=true
spring.datasource.username=${DATABASE_USER}
spring.datasource.password=${DATABASE_PASSWORD}

Se você realmente deseja usar localhost como seu db_url . Você também pode usar network_mode: "service:[service name]" propriedade do docker compose. A única desvantagem é que esta propriedade não pode ser usada com port propriedade.
version: '3'

services: 
  docker-mysql:
    image: mysql:latest
    network_mode: "service:spring-boot-jpa-docker-webapp"
    environment:
      - MYSQL_ROOT_PASSWORD=root
      - MYSQL_DATABASE=test
      - MYSQL_PASSWORD=root
  spring-boot-jpa-docker-webapp:
    image: springboot_docker
    depends_on:
      - docker-mysql
    ports:
      - 8080:8080
      - 3306 #Add this only if you want to expose the mysql to outer world.
    environment:
      - DATABASE_USER=root
      - DATABASE_PASSWORD=root
      - DATABASE_NAME=test

E seu arquivo de propriedades pode se parecer com
spring.datasource.url=jdbc:mysql://localhost:3306/${DATABASE_NAME}?autoReconnect=true
spring.datasource.username=${DATABASE_USER}
spring.datasource.password=${DATABASE_PASSWORD}