我在阅读 Spring Batch 文档时发现如果我们必须有效地从 Web 容器运行批处理作业,我们将不得不使用TaskExecutor接口的不同实现(异步版本)。
我假设一个 Http 请求会触发批处理作业。据我了解,当客户端通过JobLauncher接口的 run 方法启动作业时,客户端必须等待返回JobExecution对象,并且由于典型的批处理作业将在结束时运行数小时,这可能如果作业是同步执行的,那不是很可行。现在,AsyncTaskExecutor将在单独的线程中执行每个步骤,并立即返回具有 UNKNOWN 状态的JobExecution对象。
首先,有人可以向我解释一下,这是如何从客户端-服务器连接的角度工作的吗?在每种情况下,客户端在终止会话之前不会等待批处理完成吗?或者,客户端是否不知道批处理作业的退出状态?整个问题是否与必须保持连接直到批次结束有关?
例如,假设客户端有一个发送 HTTP 获取请求的网页,该请求由 servlet 的doget方法提供服务。此方法调用作业启动器的运行方法。此方法将返回JobExecution对象。其余的故事如上所述。
谢谢,阿迪亚。