tomcat - 部署具有不同环境条目和资源引用的 tomcat 应用程序

标签 tomcat netbeans build web-deployment deployment-descriptor

我开发了一个在本地 Apache Tomcat 7.0.14 服务器(我的开发环境)上运行的 Web 应用程序。我已准备好将我的应用程序推送到生产主机,但我在管理每个环境的不同条目值时遇到问题。

我当前的构建过程完全在我的 Netbeans 7.0.1 IDE 中执行。它使用 Ant,这是我承认我不熟悉的东西,并生成一个 .war 文件。我可以通过复制此 .war 文件来部署到我的生产主机。应用程序运行,但它缺少所有正确的生产配置数据。

我已将我的应用程序编写为可合理配置的。像大多数应用程序一样,各种数据在我的开发环境和生产环境之间必须有所不同。我能够将所有这些数据分离到我的部署描述符 (web.xml) 或上下文配置 (context.xml) 文件中,然后在我的应用程序中读取它。这些值的详细信息并不是特别相关,但作为示例,至少有一个用作数据源的资源引用值。

我无法做到的是轻松地为我的不同配置维护单独的值。我希望有 web.xml 或 context.xml 文件的第二个副本,我可以使用它来构建 .war 文件的单独副本以部署到生产环境。我也很高兴有一个解决方案允许我将某种变量 (${}?) 插入到这个文件中。但是,我必须能够在文件中维护数据本身,因为会有大量条目。由于数据将以任何一种方式存储在文件中,我认为自然的解决方案是第二个 web.xml 或 context.xml 文件。

理想情况下,我希望在 Netbeans 中有一个简单的解决方案。缺少它,在 Ant 中执行此操作的说明可能就足够了。任何相关的术语也会有所帮助。我在阅读 tomcat 中的“上下文”、“环境”和“部署”时迷路了,它们的含义与我正在寻找的不同。最后,如果这不能通过任何一个来完成,是否有可以提供帮助的工具?编写一个独特的 shell 脚本远非理想。

很难相信对此没有简单的解决方案。这似乎是每次部署都需要解决的问题。这不是为什么条目和引用存在于 xml 中吗?但是,我在 Tomcat 手册中找不到任何相关内容。

最佳答案

您有很多选择。对于构建特定的属性,我建议为每个环境创建属性文件并通过 Ant 中的 property 任务加载它们。因此,例如,给定假设环境 devqaprod,您可以拥有名为 build.{env} 的属性文件/em>.properties,然后像这样加载它们:

build.xml

<property file="build.${environment}.properties"/>

调用为:

ant -Denvironment=dev

这为您提供了一些有用的构建时属性替换。但当然,您对替换项目文件中的变量更感兴趣。其中一种方法是使用 Ant Replace Task .用法示例:

<target name="prepare-resources">
    <replace dir="${targetdir}" replacefilterfile="vars.${environment}.properties">
        <include name="**/*.txt"/>
     </replace>
</target>

您将调用类似于我给出的第一个示例的 Ant 构建。您可以使用额外的 include 指令添加任意数量的资源类型。

最后,您还可以选择用环境标识符标记一整套文件,并使用 Ant Copy Task 将它们“提升”为所需的构建工件。 .例如:

<target name="promote-resources">
    <copy todir="${targetdir}">
        <fileset dir="${sourcedir}"/>
        <mapper type="regexp" from="(.*).${environment}.(.*)" to="\1.\2"/>
    </copy>
</target>

您可以根据需要填写targetdirsourcedir。上面的代码片段会将类型为 web.dev.xmlcontext.dev.xml 的所有文件提升为 web.xml上下文.xml

您可以结合上述所有或部分方法来获得适合您环境的高度自定义构建。我还建议将 Maven 视为一种构建工具,它使此类任务变得更加容易!

关于tomcat - 部署具有不同环境条目和资源引用的 tomcat 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7733940/

相关文章:

c++ - 为什么cmake还为导入的包添加编译选项?

java - 保存按钮不起作用

spring - 需要帮助解决 Spring 应用程序中使用 Tomcat 的异步支持启用问题

multithreading - 长时间运行的后台线程导致 HTTP 请求超时

java.io.WriteAbortedException : writing aborted; java. io.NotSerializableException : org. apache.log4j.Logger

c++ - 在 NetBeans 中集成 Clang?

java - 编译Java文件,其中包含外部文件。 (CHM)

android - Dagger2 生成的类突然从 Android Studio 中消失了

performance - 减少 Visual Studio 构建时间

windows - Tomcat 7 作为 Windows 服务无法从其他系统访问