自动部署 - 使用案例
目录
简介
此页面定义了自动部署器在许多典型使用案例中的预期行为。这是 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 的行为。
启动工件 | 配置设置 | 结果 | |||||
---|---|---|---|---|---|---|---|
deployXML | copyXML | unpackWARs | XML | WAR | DIR | 备注 | |
XML | either | either | either | Y | N | N | 1, 2, 3 |
XML+EW | either | either | false | Y | N | N | 1 |
XML+EW | either | either | true | Y | N | Y | 1 |
XML+ED | either | either | either | Y | N | N | 1, 2 |
WAR+XML | false | either | false | N | Y | N | 4 |
WAR+XML | false | either | true | N | Y | Y | 4 |
WAR+XML | true | false | false | N | Y | N | |
WAR+XML | true | false | true | N | Y | Y | |
WAR+XML | true | true | false | Y | Y | N | |
WAR+XML | true | true | true | Y | Y | Y | |
WAR | either | either | false | N | Y | N | |
WAR | either | either | true | N | Y | Y | |
DIR+XML | false | either | either | N | N | Y | 4 |
DIR+XML | true | false | either | N | N | Y | |
DIR+XML | true | true | either | Y | N | Y | |
DIR | false | either | either | N | N | Y |
已删除文件
本节介绍了当自动部署过程检测到 Web 应用程序文件已被删除时 Tomcat 的行为。
当文件被删除或修改时,在修改/删除的资源之后列出的任何重新部署资源都将被删除(并可能重新创建)。重新部署资源的顺序为
- WAR
- DIR
- XML
- 全局资源
上述删除规则有一些例外
- 全局资源永远不会被删除
- 外部资源永远不会被删除
- 如果 WAR 或 DIR 已被修改,则仅当copyXML 为
true
且deployXML 为true
时才删除 XML 文件
在下表中
- '-' 表示“与不存在时相同”。即工件在更改之前不存在,在更改之后也不存在。使用 '-' 而不是 'N' 是为了关注更改的内容。
- 'R' 表示该目录通过扩展 WAR 文件重新创建。仅当unpackWARs 为
true
时才会发生这种情况。 - 'XW' 表示如果 WAR 包含 META-INF/context.xml 文件,则会将其提取并放置在主机的configBase中。仅当copyXML 为
true
且deployXML 为true
时才会发生这种情况。 - “XD” 表示,如果目录包含 META-INF/context.xml 文件,则该文件将被复制到主机的 configBase。仅当 copyXML 为
true
且 deployXML 为true
时才会发生这种情况。
现有构件 | 已删除构件 | 剩余构件 | |||||
---|---|---|---|---|---|---|---|
XML | WAR | DIR | XML | WAR | DIR | 备注 | |
N | N | Y | DIR | - | - | N | |
N | Y | N | WAR | - | N | - | |
N | Y | Y | DIR | - | Y | R | |
N | Y | Y | WAR | - | N | N | |
Y | N | N | XML | N | - | - | |
Y | N | Y | DIR | N | - | N | 5 |
Y | N | Y | XML | XD | - | Y | |
Y | Y | N | WAR | N | N | - | 5 |
Y | Y | N | XML | XW | Y | - | |
Y | Y | Y | DIR | XW | Y | R | |
Y | Y | Y | WAR | N | N | N | |
Y | Y | Y | XML | XW | Y | Y | |
Y | Y(外部) | N | WAR | Y | N | - | 3 |
Y | Y(外部) | N | XML | N | Y(外部) | - | 6 |
Y | N | Y(外部) | DIR | Y | - | N | 3 |
Y | N | Y(外部) | XML | N | - | Y(外部) | 6 |
Y | Y(外部) | Y | DIR | Y | Y(外部) | R | |
Y | Y(外部) | Y | WAR | Y | N | N | 3 |
Y | Y(外部) | Y | XML | N | Y(外部) | N | 6 |
已修改文件
本部分介绍当自动部署过程检测到 Web 应用程序文件已修改时,Tomcat 的行为。
在下表中
- '-' 表示“与不存在时相同”。即工件在更改之前不存在,在更改之后也不存在。使用 '-' 而不是 'N' 是为了关注更改的内容。
- “M” 表示构件已修改。
- “R” 表示目录已删除并通过扩展 WAR 文件重新创建。仅当 unpackWARs 为
true
时才会发生这种情况。
现有构件 | 构件已修改 | 剩余构件 | |||||
---|---|---|---|---|---|---|---|
XML | WAR | DIR | XML | WAR | DIR | 操作 | |
N | N | Y | DIR | - | - | M | 无 |
N | Y | N | WAR | - | M | - | 重新部署 |
N | Y | Y | DIR | - | Y | M | 无 |
N | Y | Y | WAR | - | M | R | 重新部署 |
Y | N | N | XML | M | - | - | 重新部署 |
Y | N | Y | DIR | Y | - | M | 无 |
Y | N | Y | XML | M | - | Y | 重新部署 |
Y | Y | N | WAR | Y | M | - | 重新加载 |
Y | Y | N | XML | M | Y | - | 重新部署 |
Y | Y | Y | DIR | Y | Y | M | 无 |
Y | Y | Y | WAR | Y | M | R | 重新加载 |
Y | Y | Y | XML | M | Y | Y | 重新部署 |
Y | Y(外部) | N | WAR | Y | M(外部) | - | 重新加载 |
Y | Y(外部) | N | XML | M | Y(外部) | - | 重新部署 |
Y | N | Y(外部) | DIR | Y | - | M(外部) | 无 |
Y | N | Y(外部) | XML | M | - | Y(外部) | 重新部署 |
Y | Y(外部) | Y | DIR | Y | Y(外部) | M | 无 |
Y | Y(外部) | Y | WAR | Y | M(外部) | R | 重新加载 |
Y | Y(外部) | Y | XML | M | Y(外部) | Y | 重新部署 |
已添加文件
这将被视为已添加文件已修改,并执行以下附加操作
- 如果添加了 WAR,则会删除任何 DIR,并可能根据 unpackWARs 重新创建 DIR。
- 如果添加了引用外部 docBase 的 XML 文件,则将删除 appBase 中的任何 WAR 或 DIR。如果外部资源是 WAR 且 unpackWARs 为 true,则可能会重新创建 DIR。
- 如果在已存在 WAR 的情况下添加了 DIR,且 unpackWARs 为
false
,则将忽略 DIR,但首次检测到 DIR 时会记录警告。如果删除了 WAR,则会保留 DIR,并可能会通过自动部署进行部署。 - 如果在已存在外部 WAR 的情况下将 WAR 添加到 appBase,则会忽略 appBase 中的 WAR,但首次检测到 appBase 中的 WAR 时会记录警告。如果删除了外部 WAR,则会保留 appBase 中的 WAR,并可能会通过自动部署进行部署。
- 如果将 XML 文件添加到从该 DIR 部署的应用程序的 META-INF 目录,则应用程序将始终重新部署。结果将与新部署相同。
备注
- 由于在 configBase 中发现了 XML 文件,因此会忽略 deployXML 和 copyXML。
- 由于没有 WAR 文件,因此会忽略 unpackWARs。
- 由于预期docBase中没有内容,上下文将无法启动。
- Web 应用程序无法部署,因为它包含嵌入的 META-INF/context.xml,deployXML 为
false
,并且configBase 中未提供 XML。 - 仅当copyXML 为
true
且deployXML 为true
时,才删除 XML 文件。 - 虽然外部资源仍然存在,但 Web 应用程序已完全取消部署,因为 Tomcat 不了解外部资源。