Spring Batch - 有没有办法异步执行 TaskletStep?

Posted

技术标签:

【中文标题】Spring Batch - 有没有办法异步执行 TaskletStep?【英文标题】:Spring Batch - Is there a way to execute a TaskletStep asynchronously? 【发布时间】:2016-03-23 17:01:17 【问题描述】:

我想从 Spring Batch TaskletStep 触发一个外部系统进程并注册一个回调。外部流程完成后,它将发出我原来的春季批处理作业的信号,并且该作业将恢复。我不希望正在运行异步步骤的系统处于空闲状态,直到外部进程完成。

【问题讨论】:

不清楚你在这里的意思 - “我不希望正在运行异步步骤的系统处于空闲状态,直到外部进程完成。”能否提供更多细节? 假设 Host1 正在运行一个 tomcat 服务器,并且每个请求都会启动一个 spring 批处理作业。现在在每个 spring 批处理作业中都有两个步骤,step1 和 step2。在第 1 步中,我将触发一个异步过程。在 step1 中触发异步进程的 tomcat 服务器线程不应等到异步进程完成,而应接受其他请求。异步过程完成后,应继续作业。 【参考方案1】:

您所描述的不是异步作业。如果在步骤 1 的“异步”过程完成之前,步骤 2 无法开始,那么它肯定是同步的。

听起来您担心的是 Tomcat 线程可能会在等待 Spring Batch 作业完成时卡住。您可以通过将您的作业包装在 Spring Integration 或 Camel 服务中来避免这种情况,该服务接受来自 Tomcat 的请求(回复 200 OK 表示已收到请求)然后开始您的作业。

【讨论】:

以上是关于Spring Batch - 有没有办法异步执行 TaskletStep?的主要内容,如果未能解决你的问题,请参考以下文章

Spring Batch 异步处理器配置以获得最佳性能

Spring Batch Job 获取先前的执行参数

spring-batch (java-config) 使用 JobExecutionDecider 识别和执行步骤

记录 Spring Batch 执行的 SQL 查询

Spring框架——批处理(batch)和事务(Transaction)

Java Spring Batch:如何验证执行是并行完成的?