如何使Tomcat等到Web应用程序完成?

时间:2012-11-19 09:16:57

标签: java tomcat servlets jersey

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

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

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

3 个答案:

答案 0 :(得分:2)

看看ServletContextListener特别是上下文Destroyed方法。

通知即将关闭servlet上下文。

  void  contextDestroyed(ServletContextEvent sce)

答案 1 :(得分:2)

我会针对您的情况采取不同的方法(这可能不是您问题的答案,而是针对您案例的提案)。

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

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

(您也可以制作原件的副本以备用)。

这样,如果tomcat在处理xml生成时停止,你将始终拥有一个可用的xml。

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

希望有所帮助

答案 2 :(得分:1)

您可以修改关闭脚本以处理此问题。确保文件处于一致状态,然后调用shutdown。

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

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