当前位置: 首页 > 知识库问答 >
问题:

我想在Mysql启动并运行[duplicate]后启动我的spring boot应用程序

璩俊雅
2023-03-14

我有一个java spring boot应用程序,它使用mysql DB。我只想在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    

这是docker文件:

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

当前获取连接被拒绝错误。

谢谢

阿达莎

共有1个答案

邹涵畅
2023-03-14

在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/

 类似资料:
  • 我的程序编译了所有内容,我没有出错,但我实际上期望tomcat应该永久在端口8080上。输出中也没有Spring。在另一个项目中,我做的一切都很好。谢谢你帮助我。 我的父母: 我的tarter.class: 我的Starter-Pom: 控制台输出: 然后什么都不会发生了。谢谢你的帮助。

  • 问题内容: 我的目标是让我的Flask应用程序启动后运行任意代码。这是我所拥有的: 理想情况下,我将能够做到这一点: 但是代码不会继续过去,因此永远不会运行。 我目前正在解决的解决方案是在与分开的线程中运行,创建一个设置此功能的函数: 然后获取)来向应用发出基本请求,以便运行“先请求之前”代码。这相当复杂,难以记录。我宁愿使用Flask中已经提供的参数,也可以使用装饰器,但据我所知,这两个都不存在

  • 使用spring-boot时,一切工作都很好。尽管如此,在spring-boot中已删除了注释和。我试图将代码重构为新版本,但我做不到。对于以下测试,我的应用程序在测试之前没有启动,http://localhost:8080返回404: 如何重构测试以使其在Spring-Boot1.5中工作?

  • 问题内容: 我写了一个Qt应用程序,它将在Linux上运行。它应该在启动时运行。 它应该在每个Linux- Suse,RedHat等上运行。 我应该写什么脚本,放在哪里? 我根本不知道如何编写脚本,因此,如果您附上示例,我将不胜感激。 问题答案: 您需要为您的应用程序创建一个桌面入口文件(请参阅此处),并将其放置在用户目录中。 Window Manager启动时,该目录中的任何桌面条目文件都将被执

  • 我试图从spring主页模拟RESTful Web服务”https://spring.io/guides/gs/rest-service/". Gradle编译工作正常,但是当我运行Spring Boot时,我得到了下面的错误,我不知道是什么原因。我是Spring新手,有人能帮我吗? 我的配置详细信息包括: Windows 7 Intellij Idea 13.1.3 Java-8 Gradle-

  • 我有一个主活动MainActivity,它是我的android应用程序的入口点。它通过发射器正确发射。然而,当我尝试执行startActivity时,我看到活动试图启动的一些调试,一些代码正确启动,但MainActivity从未启动。 我认为这可能与意图有关: 对吗? 从内部活动来看,我有 我甚至看到 10-11 22:23:46.026:INFO/ActivityManager(472):从pi