Struts2后台进程

时间:2019-05-20 16:52:02

标签: java multithreading struts2 struts daemon

我正在Struts2中实现文件延迟加载模式。我要完成的工作是:用户将X个文件上传到服务器,该文件会自动移到要按顺序处理的文件夹中。文件处理需要30到60秒,通常人们会上传100多个文件。

这不是我的设计,我发现前一个人是线性进行的:如果用户上传100个文件,则它将开始一个接一个地处理它们,并在完成所有操作后通知用户。加载窗口大约需要2个小时,没有任何信息或类似内容。

我的想法是,上传操作将仅上传文件并将它们移动到将要处理的队列文件夹中,并在某处显示一些带有进度信息的GUI。

现在,我将Struts2与整个应用程序一起在Tomcat上运行,并将文件处理器放入一个完全独立的java程序中,该程序在主机服务器上作为服务运行。当更新诸如数据库对象之类的通用对象时,这将是一个问题,因为它们现在在不同的项目中(尽管可以在同一项目中完成并生成两个程序,并进行一些简单的安装程序,所以这不是主要问题)

尽管最终用户没有什么区别,但我希望将其放在同一.war中,并让Tomcat在后台运行它(如果可能并且很有意义,我总是希望将所有内容都放在一个位置)。但是,我不确定将其放置在Struts2中的哪个位置,或者是否被他们劝阻。

我知道我可以将其放置在几乎任何我想要的地方,但是,我想知道这样做的最佳实践。我之所以这样问,是因为他们总是说Stuts2的理念是“传统之上的配置”

我已经看到了一些有关ContextInitialListeners的信息,但是,似乎总是由我负责产生和维护线程。有没有一种受支持的方法,或者只是从ServletContextListener启动线程是可行的方法?

我发现this answer详细介绍了几种方法,这是最佳实践吗?

如果是这种情况,“问题”的解决方案就像从我用来加载全局配置和规则文件的本地ServletContextListener生成新线程一样简单,并且该方法将一直存在直到被关闭。 contextDestroyed方法。如果是这样,在任何情况下都不会调用contextDestroyed(我想在tomcat上执行kill -9会阻止其运行,但是除非它是一个成熟的进程,否则生成器线程仍然会死亡),我是对的吗?

0 个答案:

没有答案