我有一个Java Web应用程序,打包为“战争”并部署在Tomcat
中。该应用程序使用Jersey
来实现REST Web服务。
此应用程序有时会更新文本(XML)文件。我想如果在应用程序仍在更新此文件时停止Tomcat
,则该文件可能已损坏。为了防止文件损坏,我希望Tomcat
等到文件在退出之前关闭。现在我想知道如何实现它。
所以,我的问题是如何使Tomcat
等到Web应用程序完成。
答案 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级别做;但我更喜欢外部控制它。这样您就可以独立于核心应用程序进行修改。