我能在Spring Boot应用程序中运行长时间的任务吗?

4
我有一个Spring Boot应用程序,它在AngularJS页面上显示来自MongoDB的一些数据,并允许用户更改它。
现在我需要创建一个机制,使我能够:
  1. 运行长时间(1-3小时)的Java方法
  2. 生成一些文件并
  3. 通过Web观察其状态(是否运行、是否完成、是否崩溃)。
我可以在Spring Boot应用程序的范围内实现这个吗?如果可以,我可以使用Spring的哪些部分来实现呢?
1个回答

1
我认为将批处理嵌入到暴露MongoDB数据存储的服务中是不明智的做法。
我会创建一个独立的批处理应用程序。如果您使用Spring堆栈,则Spring Batch将是自然选择。您需要确定如何托管Spring Batch作业以及如何触发和安排它。Spring Batch需要SQL存储其元数据。
批处理处理的状态可以由另一个应用程序通过在Servlet容器上运行的Spring Batch Admin模块进行监视。如果将此应用程序指向Spring Batch作业应用程序的SQL存储,则可以通过Web UI获得状态监视功能。
当然,每个应用程序都可以使用Spring Boot运行。
如果您不想处理它带来的操作复杂性,您仍然可以将这三个应用程序全部嵌入一个中,并且使用Spring Boot一起运作也可以正常工作。您甚至可以手动执行带参数的作业或通过配置为具有访问Spring Batch Job bean的Spring Batch Admin重新启动它们。

您还可以探索使用MongoDb作为Spring Batch元数据的存储方式。 例如,此项目可能会有所帮助。但是,这种机制需要被Spring Batch应用程序和可视化处理状态的Spring Batch Admin模块同时使用。


谢谢。关于SQL存储:像H2、Derby或类似的轻量级数据库是否足够支持Spring Batch? - Glory to Russia
1
是的,虽然您可能希望避免使用内存数据库。H2或Derby与文件存储完全受Spring Batch支持。 - luboskrnac
1
顺便说一句,我已经为我正在撰写的即将出版的书籍创建了大量关于Spring Batch框架的示例。这些示例主要使用Spring Boot和H2作为元数据存储:https://github.com/lkrnac/book-eiws-code-samples/tree/master/09-batch - luboskrnac

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接