Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.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
Tomcat 是否可以在不停止应用程序的情况下部署新的.war应用程序?_Tomcat_Grails_War - Fatal编程技术网

Tomcat 是否可以在不停止应用程序的情况下部署新的.war应用程序?

Tomcat 是否可以在不停止应用程序的情况下部署新的.war应用程序?,tomcat,grails,war,Tomcat,Grails,War,嘿,我是Grails新手,我想知道如何部署。一旦将.war部署到生产环境中,我如何才能在不停机的情况下更新应用程序?我所知道的是,您可以更改groovy文件或.gsp文件,保存更改后,浏览器中会显示这些更改,但如果存在其他类型的文件,我不完全确定这一功能。一旦您的应用程序打包为war,对源文件的更改不会像使用run app时那样自动传播。总的来说,我认为,特别是对于编译后的代码,如果代码一直处于有效的活动状态,那么执行实时更新就有点风险。您可以在开发过程中处理奇怪的部署故障,但在生产过程中,我更

嘿,我是Grails新手,我想知道如何部署。一旦将.war部署到生产环境中,我如何才能在不停机的情况下更新应用程序?

我所知道的是,您可以更改groovy文件或.gsp文件,保存更改后,浏览器中会显示这些更改,但如果存在其他类型的文件,我不完全确定这一功能。

一旦您的应用程序打包为war,对源文件的更改不会像使用run app时那样自动传播。总的来说,我认为,特别是对于编译后的代码,如果代码一直处于有效的活动状态,那么执行实时更新就有点风险。您可以在开发过程中处理奇怪的部署故障,但在生产过程中,我更希望安全起见,并有一点停机时间。

即使您热部署WAR文件(通过不重新启动服务器),在重新加载上下文时仍会有一些停机时间。这不是Grails本身,更像是J2EE/servlet


正如dogbert所说,最好打开一个维护页面(在Tomcat面前使用Apache是个好主意),关闭应用服务器,上传新的WAR,然后再次启动服务器

您可以设置两个tomcat实例,前面有一个Apache
mod\u proxy\u平衡器
,如前所述。对于应用程序的重新部署,可以应用“滚动升级”策略(假设app1和app2是您的两个tomcat实例):

  • 禁用tomcat@app1在Apache的平衡器管理器中
  • 将应用程序重新部署到tomcat@app1
  • 使用app1进行一些测试,看看是否一切正常
  • 使能tomcat@app1在平衡器管理器中
  • 禁用tomcat@app2在平衡器管理器中
  • 将应用程序重新部署到tomcat@app2
  • 使能tomcat@app2在平衡器管理器中
  • 你完成了。这样做不需要多台物理或虚拟机,也可以在单个机箱上进行。如果应用程序升级意味着数据库更改,请小心。
    上面的内容可能会被封装在一个容器中,因此一个简单的“grails集群重新部署”就可以完成您所需要的一切。这样一个脚本目前在我的列表中,但我不知道何时才能完成。

    如果您使用的是Tomcat,则可以使用所谓的并行部署:

    只需使用文档中描述的版本号命名war文件:

    • 福42.战争
    • foo##43.战争

    是的,这似乎是最好的选择。谢谢