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

Can I run long tasks in a Spring Boot application?

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

现在我需要创建一个机制,让我可以

  1. 运行 长(1-3 小时)Java 方法,
  2. 生成一些文件和
  3. 通过网络观察它的状态(它运行,它完成了吗,它崩溃了吗?)。

我可以在 Spring 引导应用程序的范围内实现它吗?如果是,我可以使用 Spring 的哪些部分来做到这一点?

我认为将批处理嵌入到您的服务中不是个好主意公开MongoDB数据存储。

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

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

当然可以 运行 每个应用 Spring Boot.

如果您不想处理它给托管三个应用程序带来的这种操作复杂性,您仍然可以将所有三个嵌入到一个应用程序中,它可以很好地与 Spring Boot。您甚至可以手动执行带有参数的作业,或通过配置为有权访问 Spring 批处理作业 bean 的 Spring 批处理管理重新启动它们。

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