使用 Java EE 部署描述符来定义环境引用

此规则将标记 Context <Environment> META-INF/context.xml 文件中找到必须变换为 <env-entry> 元素中的元素 WEB-INF/web.xml 文件。

Apache Tomcat 允许 Context <Environment> 要在这些位置中定义的元素:

由于迁移工具可能无法访问 Tomcat 配置目录、 只会标记 Context <Environment> META-INF/context.xml 文件中。 Context <Environment> 在其他位置定义的信息可以复制到 复制到 META-INF/context.xml 文件,以便 以便工具处理。

如果 WEB-INF/web.xml 存在于 Web 项目中:

Context <Environment> 元素在以下任何一种情况下都会被标记:

添加新的 <env-entry> 元素的 web.xml 文件中的 代表 Context <Environment> 如果该元素还不存在于 web.xml 文件中。 如果该条目已存在,那么会更新该条目。

如果 WEB-INF/web.xml 不存在:

全部 Context <Environment> 元素将被标记。

创建一个 WEB-INF/web.xml 文件 文件,其中包括相应的 <env-entry> 元素,如果 网络项目的 Java EE 5 或更高版本。 如果网络项目 是 J2EE 1.4 或更低。

例如,考虑具有以下内容的 META-INF/context.xml 文件:
<环境
description="Trigger because it does not exist"
name="newEntry"
override="false"
type=" java.lang.String " value=" abc123 "/>
<Environment
description="Trigger because of different value"
name="contextEnvString_1"
override="false"
type="java.lang.String"
value="new Value"/>
<Environment
description="Trigger because of different type"
name="contextEnvString_2"
override="false"
type="java.lang.Integer"
value="123"/>
<Environment
description="will not Trigger because of override set to true."
name="contextEnvString_3"
override="true"
type="java.lang.Integer"
value="123"/>

在应用程序中具有以下 web.xml 文件:

<env-entry
<description>因数值不同而触发</description>
<env-entry-name>contextEnvString_1</env-entry-name>
<env-entry-type>java.lang.String</env-entry-type>
<env-entry-value>oldValue</env-entry-value>
</env-entry>

<env-entry>
<description>因类型不同而触发</description>
<env-entry-name>contextEnvString_2</env-entry-name>
<env-entry-type>java.lang.String</env-entry-type>
<env-entry-value>123</env-entry-value>
</env-entry>

<env-entry>
<description>将不会触发,因为覆盖设置为 true。</description>
<env-entry-name>contextEnvString_3</env-entry-name>
<env-entry-type>java.lang.Integer</env-entry-type>
<env-entry-value>123456789</env-entry-value>
</env-entry>

应用自动修复后, web.xml 将更新为 包含

<env-entry
<description>因数值不同而触发</description>
<env-entry-name>contextEnvString_1</env-entry-name>
<env-entry-type>java.lang.String</env-entry-type>
<env-entry-value>新值</env-entry-value>
</env-entry>

<env-entry>
<description>因类型不同而触发</description>
<env-entry-name>contextEnvString_2</env-entry-name>
<env-entry-type>java.lang.Integer</env-entry-type>
<env-entry-value>123</env-entry-value>
</env-entry>

<env-entry>
<description>将不会触发,因为覆盖设置为 true。</description>
<env-entry-name>contextEnvString_3</env-entry-name>
<env-entry-type>java.lang.Integer</env-entry-type>
<env-entry-value>123456789</env-entry-value>
</env-entry>

<env-entry>
<description>触发是因为它不存在</description>
<env-entry-name>newEntry</env-entry-name>
<env-entry-type>java.lang.String</env-entry-type>
<env-entry-value>abc123</env-entry-value>
</env-entry>