首页 > 解决方案 > 我想在 Mysql 启动并运行后启动我的 Spring Boot 应用程序

问题描述

我有一个使用 mysql DB 的 java spring boot 应用程序。我只想在 mysql 启动并运行后启动我的 spring 应用程序。(mysql 需要 40-60 秒才能启动)。请建议如何实现它。

这是撰写文件:

version: "3.8"
services:
    mysql:
        networks: 
            - my-network-1
         
        image: mysql:latest
            
        environment: 
             MYSQL_ROOT_PASSWORD: root
             MYSQL_ROOT_USER: root
             MYSQL_DATABASE: mydb
        expose: 
            - "3306"
        
 
    my-spring: 
 
        depends_on: 
            - mysql
        build: 
            context: .
            dockerfile: dockerfile.dockerfile
        networks: 
            - my-network-1
        expose: 
            - "8080"
 
networks: 
    my-network-1:
        driver: overlay    

这是码头文件:

FROM  openjdk:8u252-jdk
 
 
ARG JAR_FILE=/somepath/jar.jar
COPY ${JAR_FILE} my.jar
ENTRYPOINT ["java","-jar","my.jar"]

当前出现连接被拒绝错误。

谢谢

阿达沙

标签: dockerdocker-composedockerfile

解决方案


在 docker compose 文件的 mysql 部分下使用它

healthcheck:
    test: ["CMD", "mysqladmin" ,"ping", "-h", "localhost"]
    interval: 1m30s
    timeout: 20s
    retries: 10

所以你的撰写文件应该是这样的

version: "3.8"
services:
  mysql:
    networks: 
        - my-network-1
     
    image: mysql:latest
        
    environment: 
         MYSQL_ROOT_PASSWORD: root
         MYSQL_ROOT_USER: root
         MYSQL_DATABASE: mydb
    expose: 
        - "3306"
    
    healthcheck:
        test: ["CMD", "mysqladmin" ,"ping", "-h", "localhost"]
        interval: 1m30s
        timeout: 20s
        retries: 10

  my-spring: 

    depends_on: 
        - mysql
    build: 
        context: .
        dockerfile: dockerfile.dockerfile
    networks: 
        - my-network-1
    expose: 
        - "8080"

networks: 
   my-network-1:
     driver: overlay   

如果上述解决方案不起作用,我建议您阅读此文档https://docs.docker.com/compose/startup-order/


推荐阅读