Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring boot 如何在不停机的情况下重新部署springboot应用程序_Spring Boot_Tomcat_Downtime_Hot Reload - Fatal编程技术网

Spring boot 如何在不停机的情况下重新部署springboot应用程序

Spring boot 如何在不停机的情况下重新部署springboot应用程序,spring-boot,tomcat,downtime,hot-reload,Spring Boot,Tomcat,Downtime,Hot Reload,我的资源有限,因此无法与docker&kubernetes一起设置完整的微服务体系结构,我的应用程序正在不断地被用户使用 我必须为每个新版本/热修复程序重新部署我的应用程序,你知道我如何以最少的停机时间实现这一点吗 有关我的应用程序的信息: 服务器中的启动持续时间:80秒 端口:8080 应用服务器:嵌入式tomcat 弹簧靴释放:2.0.1.释放 我支持一个公司nginx反向代理 包装:jar 阶段:制作 我想到了这个解决方案: 设置内部nginx,监听端口8080而不是我的应用程序并转

我的资源有限,因此无法与docker&kubernetes一起设置完整的
微服务
体系结构,我的应用程序正在不断地被用户使用

我必须为每个新版本/热修复程序重新部署我的应用程序,你知道我如何以最少的停机时间实现这一点吗

有关我的应用程序的信息:

  • 服务器中的启动持续时间:
    80秒
  • 端口:
    8080
  • 应用服务器:
    嵌入式tomcat
  • 弹簧靴释放:
    2.0.1.释放
  • 我支持一个公司
    nginx
    反向代理
  • 包装:
    jar
  • 阶段:
    制作
我想到了这个解决方案:

  • 设置内部
    nginx
    ,监听端口8080而不是我的应用程序并转发到新端口
  • 每次我想要部署时,我都会在一个新的不同端口启动我的应用程序,并更改nginx conf,然后重新加载它
以前有没有人遇到过这个问题?或者有什么想法如何实现它


提前感谢。

请运行公司nginx代理的人员在应用程序的两个实例之间进行负载平衡,例如一个运行在
8080
上,另一个运行在
8081
上。然后,您可以一次更新一个应用程序。您可能还需要将某些事情外部化,例如,在单独的主机上运行任何会话管理,而不是依赖内存中的会话处理

upstream production {
    server 123.456.789:8080;
    server 123.456.789:8081;
}

server {
    listen 80;
    server_name some.host;
    location / {
        proxy_pass http://production;
    }
}


您需要能够动态地使应用程序在不同的端口上侦听。或者,您也可以让它们在不同的主机上运行。

对于普通的Tomcat设置,您可以在同一上下文路径上部署多个应用程序。新用户将看到您的应用程序的新版本。但我不知道这在嵌入式Tomcat案例中是如何工作的:@Selaron谢谢你的回答,事实上我已经将Tomcat与springboot一起嵌入,我面临着这个问题。要切换到tomcat,我必须测量影响并复制我的所有配置,还必须更改我的应用程序设计(不包括tomcat和packagin,以及..)。请运行公司nginx代理的人员在应用程序的两个实例之间进行负载平衡,例如,一个运行在
8080
上,另一个运行在
8081
上。然后,您可以一次更新一个应用程序。您可能还需要将某些事情外部化,例如,在单独的主机上运行任何会话管理,而不是依赖内存中的会话处理。@AlexB+1我很欣赏这个想法,因为nginx中有一个运行状况检查。谢谢作为可能的答案再次感谢您的回答,我将投票表决,当我们投入生产时,我将把它标记为正确答案。