【问题标题】:Deploy war file with modifiable properties files使用可修改的属性文件部署战争文件
【发布时间】:2011-03-13 12:07:43
【问题描述】:

我正在构建一个 Web 服务并将其打包到一个 war 文件中以进行部署。现在我的所有配置文件(.properties 和 .xml)都被打包到我的 .war 文件中。这不会起作用,因为其中一些文件需要针对每个单独的安装进行修改。我知道一些 servlet 容器会保持 .war 文件完好无损,这意味着配置文件永远不会被轻易修改。我的问题是:使用这些外部配置文件部署 .war 文件的最佳做法是什么?我认为配置文件需要与 .war 文件分开运送,并放置在类路径中的目录中。在 Tomcat 中是否有这样的默认目录设置,可以将这些文件放入其中,我的 Web 服务将能够轻松找到?

也许我不应该为此设置使用 war 文件?也许我应该只提供一个 zip 文件(与 war 文件的内容相同),而部署只是将 zip 解压缩到 webapps 目录中?

【问题讨论】:

    标签: deployment jakarta-ee


    【解决方案1】:

    我不知道 Tomcat 中有任何默认目录来存储配置,我的 解决相同问题的尝试是:

    1 - 将配置移至数据库并提供脚本或网页来修改值。
    2 - 有一个脚本来部署战争。该脚本会将用户目录中的配置合并到 web.xml 或其他已部署的配置文件中。
    3 - 让 webapps 首先在用户目录中查找配置和 如果找不到,则查找战争部署的配置文件。

    最不喜欢的是 3 - 它要求所有 web 应用检查两个位置进行配置和 您最终会在服务器上得到两个具有不同值的不同 xml 文件,并且并不总是清楚使用哪个。

    下一个最喜欢的是 2 - 可以在不了解多个配置文件的情况下编写 webapps,但是当有人从 Tomcat 管理器而不是使用您的脚本进行部署时,您会遇到问题。

    最喜欢的是 1。这在大多数情况下都有效。问题是当您没有数据库或 想要配置连接到数据库的方式。

    【讨论】:

    • 我想我将完全避免部署战争文件,而是使用需要解压缩才能安装应用程序的 zip。这完全避免了这种头痛。
    • 在执行升级时如何解压 zip 以防止配置被覆盖?
    • 你是对的,它不能解决这个问题。但至少允许手动编辑文件并保存旧文件。不理想,但比在部署时几乎无法控制配置的情况下“隐藏”war 文件中的所有内容要好。
    【解决方案2】:

    如果让所有 web 应用都可以看到该文件不是问题,您可以将其发送到 $CATALINA_HOME/lib

    【讨论】:

      【解决方案3】:

      一种解决方案是在部署war文件后修改属性文件是使用ServletContext.getRealpath()方法获取真实路径是指文件在部署它的服务器中的路径,然后修改该文件它将修改文件容器只是不是原始文件。因此,如果它对您来说是重要的修改,您需要备份它。因此,您无需重新部署 war 文件,因为它已经在修改已部署容器中的文件。

      此解决方案也可以从 java 类编辑网页文件夹中的文件。

      如果您想要更多描述或如何做,请告诉我我已经做到了。

      【讨论】:

        猜你喜欢
        • 2021-03-24
        • 1970-01-01
        • 2012-11-27
        • 1970-01-01
        • 1970-01-01
        • 2017-01-10
        • 2014-03-29
        • 1970-01-01
        • 2014-05-17
        相关资源
        最近更新 更多