我正在设计/开发一个最终将作为 WAR 部署到 Tomcat 的 Web 应用程序。此应用程序的功能之一是用户能够将图像上传到我们的服务器并进行编辑(生成缩略图等)。在幕后,我们将使用ImageMagick
它的 Java 适配器库IM4Java
。
初始原型表明,每次我们重新部署应用程序时,ImageMagick 都需要一些时间在我们的服务器上“预热”。这促使我们考虑以下两种可能性之一:
- 创建一个
ImageService.war
与主应用程序一起部署的 Web 服务,并基本上处理对IM4Java
底层的所有调用(例如,公开一个 RESTful 服务并在收到请求时运行 ImageMagick;然后主 Web 应用程序可以找到已编辑的文件)在同一个本地文件系统上);或者 - 只需创建一个
Thread
子类(即ImageServiceThread
),启动它并在部署时运行它,并确保它在 Tomcat 取消部署应用程序时关闭
这两个前景让我从更抽象的意义上思考了这个问题:什么时候应该简单地将工作委托给一个单独的线程,什么时候适合制作一个成熟的、单独的应用程序(在我们的例子中是一个 WAR)?
我们的主要应用程序将是这个“图像服务”的唯一用户,这让我认为单独的 WAR 是矫枉过正和不必要的。但我以前从未处理过 Tomcat 内部的线程,并且不确定是否可以生成和终止线程,以便其生命周期与主/主应用程序线程的生命周期一致。
作为此类决定的一部分,应考虑哪些因素?提前致谢。