我有一个Java Spring(MVC)servlet,我需要创建一个缓慢,长时间运行的进程,该进程将随着时间的推移在数据库中创建条目。 servlet应该提供数据库内容的视图,以及有关进程状态的一些信息。
这个过程不是计算密集型的,但需要很长时间。我很可能需要在运行时多次重启servlet。该过程能够制作检查点,但必须调用已知代码来制作和应用它们。该过程在数据库中创建条目,并且可以并且需要以这种方式监视其活动。
到目前为止,我考虑以下想法:
我不知道,也许这是基于意见的#34;但情况可能很频繁,我想知道一个应该被视为专业实施的典型好解决方案。
答案 0 :(得分:3)
由于您可能会重新启动Servlet,实际上是应用程序甚至是整个容器进程 - 您应该在当前的Servlet /应用程序/容器之外安排长时间运行的作业。
最好的方法是在另一个流程中安排工作。您可以推出自己的解决方案,但有些平台已经完全实现了这一点,Gearman就是一个例子,Spring XD是另一个例子。
基本思想是将作业切换到作业队列,并且(理想情况下)分布式作业调度程序处理队列。该调度程序将提供API或事件源来通知(即发布 - 订阅队列)您的应用程序进度。
理想情况下,作业本身可以使用批量框架来实现,例如Spring Batch或JSR 352 Batch Applications。两者都提供检查点,因此可以从检查点重新启动您的工作。