自动部署 - 使用案例

目录

简介

此页面定义了自动部署器在许多典型使用案例中的预期行为。这是 Tomcat 功能的一个复杂领域。虽然本文档与 Tomcat 行为之间的任何差异都是一个错误,但修复方法可能是更改此文档、Tomcat 行为或两者。

密钥

术语描述
XML 位于主机的 configBase 中的 XML 配置文件。它必须包含一个 <Context> 元素,并且可能包含可选的嵌套元素。它不定义显式的 docBase 属性。它表示一个 Web 应用程序。它通常称为 context.xml 文件。
XML+EW 位于主机的 configBase 中的 XML 配置文件。它必须包含一个 <Context> 元素,并且可能包含可选的嵌套元素。它包括一个显式的 docBase 属性,该属性指向外部 WAR。它表示一个 Web 应用程序。它通常称为 context.xml 文件。
XML+ED 位于主机的 configBase 中的 XML 配置文件。它必须包含一个 <Context> 元素,并且可能包含可选的嵌套元素。它包括一个显式的 docBase 属性,该属性指向外部目录。它表示一个 Web 应用程序。它通常称为 context.xml 文件。
WAR 位于主机的 appBase 中的 WAR 文件。WAR 不包括嵌入式 context.xml 文件。
WAR+XML 位于主机的appBase中的 WAR 文件。WAR 包含一个嵌入式 context.xml 文件。
DIR 位于主机的appBase中的目录。该目录不包含嵌入式 context.xml 文件。
DIR+XML 位于主机的appBase中的目录。该目录包含一个嵌入式 context.xml 文件。
redeploy 表示 Web 应用程序的 Context 对象被销毁,并创建一个新的 Context 对象。如果存在且配置允许,将通过解析 context.xml 文件创建此新的 Context 对象。在应用程序启动过程中解析 web.xml 文件。默认配置中存储在标准管理器中的任何会话都将不会持久化。在重新部署期间对 Web 应用程序的任何请求都将被处理,就好像未部署 Web 应用程序一样。
reload 表示 Web 应用程序的 Context 对象被停止,然后启动。在应用程序启动过程中解析 web.xml 文件。默认配置中存储在标准管理器中的任何会话都将不会持久化。在重新加载期间对 Web 应用程序的任何请求都将被保留,直到重新加载完成,此时它们将继续使用重新加载的 Web 应用程序。

新文件

本节介绍了当自动部署过程发现新的 Web 应用程序时 Tomcat 的行为。

启动工件 配置设置 结果
deployXMLcopyXMLunpackWARs XMLWARDIR备注
XML eithereithereither YNN1, 2, 3
XML+EW eithereitherfalse YNN1
XML+EW eithereithertrue YNY1
XML+ED eithereithereither YNN1, 2
WAR+XML falseeitherfalse NYN4
WAR+XML falseeithertrue NYY4
WAR+XML truefalsefalse NYN
WAR+XML truefalsetrue NYY
WAR+XML truetruefalse YYN
WAR+XML truetruetrue YYY
WAR eithereitherfalse NYN
WAR eithereithertrue NYY
DIR+XML falseeithereither NNY4
DIR+XML truefalseeither NNY
DIR+XML truetrueeither YNY
DIR falseeithereither NNY

已删除文件

本节介绍了当自动部署过程检测到 Web 应用程序文件已被删除时 Tomcat 的行为。

当文件被删除或修改时,在修改/删除的资源之后列出的任何重新部署资源都将被删除(并可能重新创建)。重新部署资源的顺序为

  1. WAR
  2. DIR
  3. XML
  4. 全局资源

上述删除规则有一些例外

  • 全局资源永远不会被删除
  • 外部资源永远不会被删除
  • 如果 WAR 或 DIR 已被修改,则仅当copyXMLtruedeployXMLtrue 时才删除 XML 文件

在下表中

  • '-' 表示“与不存在时相同”。即工件在更改之前不存在,在更改之后也不存在。使用 '-' 而不是 'N' 是为了关注更改的内容。
  • 'R' 表示该目录通过扩展 WAR 文件重新创建。仅当unpackWARstrue 时才会发生这种情况。
  • 'XW' 表示如果 WAR 包含 META-INF/context.xml 文件,则会将其提取并放置在主机的configBase中。仅当copyXMLtruedeployXMLtrue 时才会发生这种情况。
  • “XD” 表示,如果目录包含 META-INF/context.xml 文件,则该文件将被复制到主机的 configBase。仅当 copyXMLtruedeployXMLtrue 时才会发生这种情况。
现有构件 已删除构件 剩余构件
XMLWARDIR XMLWARDIR备注
NNY DIR --N
NYN WAR -N-
NYY DIR -YR
NYY WAR -NN
YNN XML N--
YNY DIR N-N5
YNY XML XD-Y
YYN WAR NN-5
YYN XML XWY-
YYY DIR XWYR
YYY WAR NNN
YYY XML XWYY
YY(外部)N WAR YN-3
YY(外部)N XML NY(外部)-6
YNY(外部) DIR Y-N3
YNY(外部) XML N-Y(外部)6
YY(外部)Y DIR YY(外部)R
YY(外部)Y WAR YNN3
YY(外部)Y XML NY(外部)N6

已修改文件

本部分介绍当自动部署过程检测到 Web 应用程序文件已修改时,Tomcat 的行为。

在下表中

  • '-' 表示“与不存在时相同”。即工件在更改之前不存在,在更改之后也不存在。使用 '-' 而不是 'N' 是为了关注更改的内容。
  • “M” 表示构件已修改。
  • “R” 表示目录已删除并通过扩展 WAR 文件重新创建。仅当 unpackWARstrue 时才会发生这种情况。
现有构件 构件已修改 剩余构件
XMLWARDIR XMLWARDIR操作
NNY DIR --M
NYN WAR -M-重新部署
NYY DIR -YM
NYY WAR -MR重新部署
YNN XML M--重新部署
YNY DIR Y-M
YNY XML M-Y重新部署
YYN WAR YM-重新加载
YYN XML MY-重新部署
YYY DIR YYM
YYY WAR YMR重新加载
YYY XML MYY重新部署
YY(外部)N WAR YM(外部)-重新加载
YY(外部)N XML MY(外部)-重新部署
YNY(外部) DIR Y-M(外部)
YNY(外部) XML M-Y(外部)重新部署
YY(外部)Y DIR YY(外部)M
YY(外部)Y WAR YM(外部)R重新加载
YY(外部)Y XML MY(外部)Y重新部署

已添加文件

这将被视为已添加文件已修改,并执行以下附加操作

  • 如果添加了 WAR,则会删除任何 DIR,并可能根据 unpackWARs 重新创建 DIR。
  • 如果添加了引用外部 docBase 的 XML 文件,则将删除 appBase 中的任何 WAR 或 DIR。如果外部资源是 WAR 且 unpackWARs 为 true,则可能会重新创建 DIR。
  • 如果在已存在 WAR 的情况下添加了 DIR,且 unpackWARsfalse,则将忽略 DIR,但首次检测到 DIR 时会记录警告。如果删除了 WAR,则会保留 DIR,并可能会通过自动部署进行部署。
  • 如果在已存在外部 WAR 的情况下将 WAR 添加到 appBase,则会忽略 appBase 中的 WAR,但首次检测到 appBase 中的 WAR 时会记录警告。如果删除了外部 WAR,则会保留 appBase 中的 WAR,并可能会通过自动部署进行部署。
  • 如果将 XML 文件添加到从该 DIR 部署的应用程序的 META-INF 目录,则应用程序将始终重新部署。结果将与新部署相同。

备注

  1. 由于在 configBase 中发现了 XML 文件,因此会忽略 deployXMLcopyXML
  2. 由于没有 WAR 文件,因此会忽略 unpackWARs
  3. 由于预期docBase中没有内容,上下文将无法启动。
  4. Web 应用程序无法部署,因为它包含嵌入的 META-INF/context.xml,deployXMLfalse,并且configBase 中未提供 XML。
  5. 仅当copyXMLtruedeployXMLtrue 时,才删除 XML 文件。
  6. 虽然外部资源仍然存在,但 Web 应用程序已完全取消部署,因为 Tomcat 不了解外部资源。