【问题标题】:How to purge tomcat's cache when deploying a new .war file? Is there a config setting?部署新的 .war 文件时如何清除 tomcat 的缓存?有配置设置吗?
【发布时间】:2011-12-19 23:11:46
【问题描述】:

我有一个简单的 hello, world servlet 应用程序,我只是在玩弄它,并将它推送到我在 VPS 上的 tomcat 服务器。

当我对我的代码进行更改并部署它时,tomcat 不会提供新发布的代码(即使在再次启动服务之后)。

我停止服务,然后将新的war文件推送到/webapps/,并确保也删除旧的分解文件夹。

当我重新启动服务器时,它仍然为旧代码库提供服务。

配置中是否有阻止这种行为的设置?

另外,我必须删除哪些文件夹?请具体说明(文件夹和路径),因为我尝试删除一些但没有得到任何地方。

【问题讨论】:

  • tomcat 是否指向与您发布war 文件的目录相同的目录?如果您删除了爆炸版本(我假设工作目录)并重新启动服务器,我想不出tomcat如何访问旧代码。请仔细检查您的 server.xml。

标签: java tomcat


【解决方案1】:

您可以删除“工作”目录。

确定不是浏览器缓存问题?

【讨论】:

  • 是的,我敢肯定,我什至删除了 work/catalini/localhost 文件夹(或类似的文件夹),它已经发生了几次,这不是偶然的 :)
  • 删除tomcat目录中的东西不一定会影响浏览器缓存。
  • 好吧,新版本正在将日志写入文件,我确实尝试了 firefox(首先使用 chome)
  • 这不是浏览器缓存问题。所有 Web 服务器在某个时间点都会将损坏的缓存文件存储在磁盘上。并且需要被清除。
  • 不要删除work 目录。只需删除其内容。 work 目录必须存在(至少为空),Tomcat 才能启动。
【解决方案2】:

我会补充一点,以防出现非常奇怪的行为——你花了几个小时说 WTF——尝试手动删除 /webapps/yourwebapp/WEB-INF/classes 目录。移动到另一个包的 java 源文件不会删除其编译的类文件 - 至少在 TC 上的爆炸 Web 应用程序的情况下。这会严重地让您因不可预测的行为而发疯,尤其是使用带注释的 servlet。

【讨论】:

    【解决方案3】:

    聚会有点晚了,我是这样做的

    1. 从经理处取消部署应用程序
    2. 使用./shutdown.sh 关闭tomcat
    3. 删除浏览器缓存
    4. 从 webapps 和 /work/Catalina/... 删除应用程序
    5. 使用./startup.sh启动tomcat
    6. 将新版本的应用程序复制到/webapps 并启动它。

    【讨论】:

      【解决方案4】:

      我遇到了一些不反映实际代码库的奇怪行为,所以在尝试了几种解决方案一段时间后,我的问题通过手动删除 /var/cache/tomcat8/ 下的所有内容得到解决

      【讨论】:

      • 在我的情况下,类加载器发现了一个不存在的类,后来它无法加载。问题是存储在 /var/cache/tomcat6/...中的陈旧 .class 文件...
      【解决方案5】:

      似乎是时间戳问题。根据 tomcat 文档,如果有新的 jsp 或 servlet,这将在工作文件夹中创建一个新的 _java 文件,除非 _java.class 文件比 jsp 或 servlet 更新。

      【讨论】:

        【解决方案6】:

        Tomcat 还会创建一个与work/ 处于同一级别的ROOT 目录。 ROOT/ 也缓存旧的东西。删除ROOT 以及work 中的Catalina 目录。

        【讨论】:

          【解决方案7】:

          我是 tomcat 的新手,今天这个问题让我发疯了。这是零星的。我请了一位同事帮忙,战争扩大了,它确实是应该的。 3 当天晚些时候部署,它恢复到原始版本。

          在我的例子中,MySite.WAR 扩展为 ROOT AND MySite。 MySite 通常会提供服务。但有时 tomcat 认为它更喜欢 ROOT 并且我的所有更改都消失了。

          “解决方案”是在每次部署战争时删除 ROOT 网站。

          【讨论】:

            【解决方案8】:

            听起来您的类加载器在更新 servlet 类后不会加载它们。如果您更改应该提示服务器/容器重新部署和重新加载 servlet 类的 web.xml 文件,这可能会得到解决。 我想在 web.xml 的末尾添加一个空行并保存它,然后看看是否可以修复它。正如我所说,这可能会解决它,也可能不会。

            祝你好运!

            【讨论】:

            • 不过,在完全删除旧版本后,不应在重新启动后持续存在。
            • 嗯,是的。通常不应该,但值得一试。
            【解决方案9】:

            我很难将我的战争文件放在/etc/tomcat7/webapps,但真正的路径是/var/lib/tomcat7/webapps。可能你想用sudo find / -type f -name "my-war-file.war" 知道它在哪里。

            并删除此文件夹 /tmp/hsperfdata_* 和 /tmp/tomcat7-tomcat7-tmp。

            【讨论】:

              【解决方案10】:

              我有两次同样的问题,但第二次我意识到这根本不是Tomcat的问题。尝试删除浏览器的缓存,刷新页面,看看是否是新版本的页面在您的服务器上正在显示。它对我有用。

              【讨论】:

                【解决方案11】:
                1. 在文件夹“/webapp”中删除 *.war 文件和与这些文件对应的文件夹 文件夹(同名)。
                2. 清除文件夹“/webapps/ROOT”tomcat。

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 2019-09-20
                  • 1970-01-01
                  • 2019-08-15
                  • 2016-03-30
                  • 2012-06-11
                  • 1970-01-01
                  • 2014-12-23
                  • 2015-02-27
                  相关资源
                  最近更新 更多