gpt4 book ai didi

java - Tomcat 更新 context.xml 但不应该

转载 作者:搜寻专家 更新时间:2023-10-31 19:57:28 26 4
gpt4 key购买 nike

Tomcat 文档 (http://tomcat.apache.org/tomcat-6.0-doc/config/context.html)

Only if a context file does not exist for the application in the $CATALINA_BASE/conf/[enginename]/[hostname]/, in an individual file at /META-INF/context.xml inside the application files. If the web application is packaged as a WAR then /META-INF/context.xml will be copied to $CATALINA_BASE/conf/[enginename]/[hostname]/ and renamed to match the application's context path. Once this file exists, it will not be replaced if a new WAR with a newer /META-INF/context.xml is placed in the host's appBase.

粗体字是清楚的。但我通知这不是真的。 (我正是需要这种行为)

步骤如下:

  1. 将 context.xml 包含在 META-INF 中的 aaa.war
  2. 复制到网络应用程序。 tomcat部署。文件 conf\Catalina\localhost\aaa.xml OK
  3. 通过更改 META-INF/context.xml 来更改 aaa.war
  4. 复制到网络应用
  5. 文件 conf\Catalina\localhost\aaa.xml 已更改!!!

怎么了?是错误还是隐藏功能?

背景——我要解决的问题:

配置独立构建和安装。我工厂运送 war 文件。客户使用他自己的设置来配置他的 Tomcat。当我发布新版本时,我只是在没有配置的情况下交付 war ,而在部署时它将使用客户端特定的配置。

根据文档,最好的地方是 context.xml 但是如果它每次都被覆盖,那么使用它就毫无意义了。 (如果必须创建新的可交付成果,我为什么要使用 JNDI 之类的东西?在构建时更改某些东西并不是一个很大的配置优势。)

环境:windows,tomcat 6.0.33

最佳答案

我遇到了同样的问题,文档至少不充分,如果不是直接误导的话。

问题是,如果您将已部署的 WAR 文件的新版本复制到 webapps 目录,Tomcat 将不会重新部署现有应用程序,而是取消部署旧应用程序,然后再部署新应用程序。乍一看,差异似乎微不足道,但问题是在旧应用程序卸载期间,conf/Catalina/localhost 中的任何上下文文件也会被删除。然后,在部署新应用程序期间,当前 WAR 文件中的新上下文文件将被复制到 conf/Catalina/localhost。

我找到的唯一可行的解​​决方案不是将新应用程序部署为 WAR 文件,而是替换或覆盖扩展目录,例如不要将 aaa.war 复制到 webapps/,而是将 aaa.war 直接解压到 webapps/aaa/。

关于java - Tomcat 更新 context.xml 但不应该,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9589379/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com