【发布时间】:2015-11-14 13:49:12
【问题描述】:
我有一个 Java Spring (MVC) servlet,我需要创建一个缓慢、长时间运行的进程,该进程会随着时间的推移在数据库中创建条目。 servlet 应该提供对数据库内容的视图,以及有关进程状态的一些信息。
该过程不是计算密集型的,但需要很长时间。我很可能需要在 servlet 运行时多次重新启动它。该过程能够制作检查点,但必须调用已知代码来制作和应用它们。该流程在数据库中创建条目,并且可以并且需要以这种方式监视其活动。
到目前为止,我考虑了以下想法:
- 一个独立的 Java 程序,由 Linux Cron 控制。
- 一个 ExecutorService,附加到 servlet 类中的静态字段。
- 从 @PostConstruct 方法启动活动的 Spring bean。
- Spring Batch 框架可能是可能的,但我不确定它是否对我需要的来说不是太重。
我不知道,也许这是“基于意见”,但这种情况可能很常见,我想知道一个典型的好解决方案,应该考虑专业实施。
【问题讨论】:
-
如果你想重启你的servlet而不影响长时间运行的进程,那么你只有一个选择——创建另一个使用Spring批处理或Linux Cron运行的Java程序。 (问题是基于意见的)
-
如果您想听听意见:我认为单独的应用程序会很好,因为您可以关闭或重新启动您的 spring mvc 应用程序而无需担心或尝试使用
static破解系统(其中我认为行不通)。这可能取决于您的环境,第二个应用程序部署到应用程序服务器、机器上本地的新独立(服务器/cron)进程或工作集群中的新微服务。 “您的环境”通常与其他任何人的环境如此不同,以至于没有一种典型的好解决方案。
标签: java spring servlets scheduler long-running-processes