我可以在Spring Boot应用程序中运行长任务吗?

时间:2015-10-10 10:46:53

标签: java spring spring-boot spring-batch batch-processing

我有一个Spring Boot应用程序,它在AngularJS页面上显示来自MongoDB的一些数据,并允许用户更改它。

现在我需要创建一个允许我

的机制
  1. 运行一个长(1-3小时)的Java方法,
  2. 生成一些文件和
  3. 通过网络观察它的状态(它是否运行,是否完成,是否崩溃?)。
  4. 我可以在Spring Boot应用程序的范围内实现吗?如果是的话,我可以使用Spring的哪些部分来做到这一点?

1 个答案:

答案 0 :(得分:1)

我认为将批量处理嵌入到您的服务中并不是一个好主意暴露MongoDB数据存储。

我会创建单独的批处理应用程序。如果您使用Spring堆栈, Spring Batch将是自然选择。您需要弄清楚如何托管Spring Batch作业以及如何触发和计划它。 Spring Batch需要SQL存储才能获得元数据

批处理的状态可以由另一个在Servlet容器上运行 Spring Batch Admin module的应用程序监控。如果您将此应用程序指向Spring Batch作业应用程序的SQL存储,则可以通过开箱即用的Web UI 监控状态

当然它可以使用Spring Boot运行每个应用程序。

如果你不想处理这种操作复杂性,它会带来三个应用程序,你仍然可以所有三个嵌入到一个应用程序中,它可以正常使用Spring Boot 。您甚至可以手动执行带参数的作业,也可以通过配置为可以访问Spring Batch Job bean的Spring Batch Admin重新启动它们。

您还可以使用MongoDb作为Spring Batch元数据的存储进行探索。 E.g. this project may help。但是这种机制需要由Spring Batch应用程序使用,也需要Spring Batch Admin模块可视化处理状态。