java - 什么时候用线程,什么时候用 WAR?

标签 java multithreading tomcat web-applications

我正在设计/开发最终将作为 WAR 部署到 Tomcat 的 Web 应用程序。此应用程序的功能之一是用户能够将图像上传到我们的服务器并进行编辑(生成缩略图等)。在后台,我们将使用 ImageMagick 及其 Java 适配器库 IM4Java

初始原型(prototype)表明,每次我们重新部署应用程序时,ImageMagick 都需要一些时间在我们的服务器上“预热”。这促使我们考虑以下两种可能性之一:

  • 创建一个 ImageService.war web 服务,它与主要应用程序一起部署,基本上处理所有对 IM4Java 的调用(公开,比如说,一个 RESTful 服务,只是在收到请求时运行 ImageMagick;然后主 Web 应用程序可以在同一本地文件系统上找到已编辑的文件);或
  • 只需创建一个 Thread 子类(即 ImageServiceThread),启动它并在部署时运行它,并确保它在 Tomcat 取消部署应用程序时关闭

这两个前景让我从更抽象的意义上思考这个问题:什么时候应该简单地将工作委托(delegate)给一个单独的线程,什么时候适合制作一个成熟的、独立的应用程序(在我们的发生 war )

我们的主要应用程序将是此“图像服务”的唯一用户,这让我认为单独的 WAR 是过分的且不必要的。但我以前从未处理过 Tomcat 内部的线程,我不确定是否可以生成和终止线程以使其生命周期与主/主应用程序线程的生命周期一致。

做出此类决定时应考虑哪些因素?提前致谢。

最佳答案

在需要其正常运行的Web应用程序中,绝对保留ImageMagick的预加载。这样,您就不会忘记这两个 Web 应用程序应该一起部署。

将特定 web 应用程序所需的所有内容放在一个地方是个好主意:这就是创建 WAR 格式和存在诸如 ServletContextListener 之类的东西的原因。

老实说,我不确定我是否愿意“线程化”IM 的预加载——只需从 ServletContextListener 运行一些示例命令并让它同步加载。

关于java - 什么时候用线程,什么时候用 WAR?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11055986/

相关文章:

java - kafka生产者单元测试(java)

java - 部署在 tomcat 上的 webapp 的集成测试覆盖率?

java - 同步关键字在内部如何工作

ios - 动画运行时在 iOS 应用程序的主线程上暂停执行

tomcat - Apache CXF + Spring Java 配置 + 替换 beans.xml

tomcat - 有没有办法让 Tomcat 7 显示 servlet 映射?

java - readObject 的 EOF 异常

java - 如何在 java 事件发生后更新帧?

适合初学者的 Java 线程

c++ - tcp通信的线程