Tomcat如何部署同一应用的不同版本

  • 来源:
  • 更新日期:2018-05-10

摘要:你是否听说过在一个Tomcat中部署两个应用,使用相同的请求路径? 你是否了解,对于Tomcat中的应用,可以部署同时部署多个版本? 其实,在Tomcat的Context组件中,包含一项名叫Parallel Deployment的功能,就支持我们上面提到的这几点。 也许,你会问,我为什么要部署两个同名的应用呢? 试想下面一种场景: 你的应用已经部署到线上,正在源源不断的接收到用户的请求,你忽然

你是否听说过在一个Tomcat中部署两个应用,使用相同的请求路径?
你是否了解,对于Tomcat中的应用,可以部署同时部署多个版本?

002UASMrzy7605pjKJv15&690.jpg
其实,在Tomcat的Context组件中,包含一项名叫Parallel Deployment的功能,就支持我们上面提到的这几点。
也许,你会问,我为什么要部署两个同名的应用呢?

试想下面一种场景:

你的应用已经部署到线上,正在源源不断的接收到用户的请求,你忽然发现有一个功能需要马上修改一下、升级一下,甚至说你的产品发了新版本。此时为了上线新功能、新版本,你采用什么方式实现,又不影响用户使用呢?
不少同学会想到集群部署的应用,可以先把一部分的实例停止,部署后再启动起来再部署另外一部分。

那对于单实例的应用,该怎么办呢?

憋着急,我们有Tomcat的Parallel Deployment特性,可以同时部署应用的多个版本,而且请求的path保持一致。这真是个好消息。对于部署新版本之后到达的请求,默认会使用新版本来处理,对于旧的请求,由于session中已经包含请求数据,所以会继续处理,直到完成。
下图是manager应用是显示的当前虚拟主机中部署的多个版本的应用。

 

那对于要以多版本部署的应用,应该如何配置呢?
对于应用的版本部署那是相~当~简单,只需要新版本应用的应用名称后加两个#,再加上版本号即可。例如

foo##1.0.war

在部署时,1.0被做为应用的版本号使用。

或者应用以目录形式部署时也以这种格式命名即可。然后采用熟悉的形式,无论 是直接在webapps目录中部署还是通过manager应用远程部署,都可以。

总结下:

1. webapps/myapp##1.0.war

2. webapps/myapp##1.1/..

3. <Context path="/myapp" docBase="E:\\myapp##1.2"/>