【发布时间】:2011-10-04 07:20:07
【问题描述】:
我在阅读 Spring Batch 文档时发现如果我们必须高效地运行批处理作业,我们将不得不使用 TaskExecutor 接口的不同实现(异步版本)从网络容器。
我假设一个 Http 请求会触发批处理作业。据我了解,当客户端通过 JobLauncher 接口的 run 方法启动作业时,客户端必须等待返回 JobExecution 对象,因为一个典型的批处理作业最终会运行几个小时,如果这些作业是同步执行的,这可能不太可行。现在,AsyncTaskExecutor 将在单独的线程中执行每个步骤,并立即返回具有 UNKNOWN 状态的 JobExecution 对象。
首先,有人可以从客户端-服务器连接的角度向我解释一下这是如何工作的吗?在每种情况下,客户端在终止会话之前是否不会等待批处理完成?或者,客户端是否不知道批处理作业的退出状态?整个问题是否与必须保持连接直到批处理结束有关?
例如,假设客户端有一个网页,该网页发送一个 HTTP 获取请求,该请求由 servlet 的 doget 方法提供服务。此方法调用作业启动器的 run 方法。此方法将返回 JobExecution 对象。其余的故事如上。
谢谢, 阿迪亚。
【问题讨论】:
-
您能否举例说明客户端如何调用服务器来澄清您的问题?
-
嗨,我已经编辑了我的问题并添加了你问的例子。希望现在很清楚。
标签: java spring spring-batch web-container