0

我有一个 Java Web 应用程序,打包为“战争”并部署在Tomcat. 该应用程序用于Jersey实现 REST Web 服务。

此应用程序有时会更新文本 (XML) 文件。我猜如果Tomcat在应用程序仍在更新此文件时停止,则该文件可能已损坏。为了防止文件损坏,我想Tomcat等到文件关闭后再退出。现在我想知道如何实现它。

所以,我的问题是如何Tomcat等到 Web 应用程序完成。

4

3 回答 3

2

看看ServletContextListener特别是 context Destroyed 方法。

Servlet 上下文即将关闭的通知。

  void  contextDestroyed(ServletContextEvent sce)
于 2012-11-19T09:19:20.390 回答
2

在您的情况下,我会采取不同的方法(这可能不是您问题的答案,而是您的情况的建议)。

将新的 xml 文件写入临时文件 (conf.xml.tmp),这样您的原始文件 (conf.xml) 仍然保持不变。

完成生成 xml 后,只需将新生成的 (conf.xml.tmp) 移到原始 (conf.xml) 的顶部。

(您也可以复制原件用于备份)。

这样,如果 tomcat 在处理 xml 生成时停止,您将始终拥有一个工作 xml。

这里的关键是在同一个磁盘中移动文件在某种程度上是一种“原子”操作,它会完成或不完成,但不会完成一半。

希望能帮助到你

于 2012-11-19T09:41:02.820 回答
1

您可以修改关闭脚本来解决这个问题。确保该文件处于一致状态,然后调用关闭。

您可以检查文件写入是否正在处理中,然后将脚本休眠 5 分钟,然后调用 shutdown.sh/shutdown.bat 脚本。

除此之外,您还可以在 java 级别执行;但我更喜欢从外部控制它。这样您就可以独立于您的核心应用程序对其进行修改。

于 2012-11-19T09:33:06.987 回答