Mysql
 sql >> Database >  >> RDS >> Mysql

Spring Boot non può connettersi a MySQL ed esce in Docker/Docker Compose

Stai passando il DATABASE_HOST , DATABASE_PORT , DATABASE_NAME , DATABASE_USER e DATABASE_PASSWORD ma non lo stai utilizzando all'interno della tua app.

Aggiorna le tue proprietà in questo modo. (Meglio se crei un profilo in modo che l'app venga eseguita al di fuori della finestra mobile)

spring.datasource.url=jdbc:mysql://${DATABASE_HOST}:${DATABASE_PORT}/${DATABASE_NAME}?autoReconnect=true
spring.datasource.username=${DATABASE_USER}
spring.datasource.password=${DATABASE_PASSWORD}

Se vuoi davvero usare localhost come tuo db_url . Puoi anche usare network_mode: "service:[service name]" proprietà di docker comporre. L'unico aspetto negativo è che questa proprietà non può essere utilizzata con port proprietà.

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 il tuo file delle proprietà potrebbe assomigliare a

spring.datasource.url=jdbc:mysql://localhost:3306/${DATABASE_NAME}?autoReconnect=true
spring.datasource.username=${DATABASE_USER}
spring.datasource.password=${DATABASE_PASSWORD}