通过 spring 批处理监控当前 运行 进程,并在达到节流限制时发出通知

Monitor currently running process via spring batch process and notify if the throttle limit is reached

我有一个 spring 启动 Web 应用程序,我想通过批处理从 CSV 文件上传详细信息。文件可以从任何位置上传,我想限制一次处理 3 个作业。如果已经在处理 3 个文件,我们必须将该信息提供给 UI,如“已达到节流限制。稍后再试”。我怎样才能做到这一点? 我现在的flow.xml是主从方式

    <!-- partitioner job -->
    <job id="partitionJob" xmlns="http://www.springframework.org/schema/batch">

    <!-- master step -->
            <step id="masterStep">
              <partition step="slave" partitioner="partitioner">
                    <handler grid-size="1" task-executor="taskExecutor" />
               </partition>
            </step>

    </job>

    <!-- each thread will run this job, with different stepExecutionContext
    values. -->
    <step id="slave" xmlns="http://www.springframework.org/schema/batch">
            <tasklet transaction-manager="transactionManager"  throttle-limit="3">
                <chunk reader="itemReader" processor="userItemProcessor" writer="itemWriter"
               commit-interval="10" />
                 <listeners>
                        <listener ref="stepJobListener" />
                  </listeners>
            </tasklet>
    </step>

您在步骤中设置的 throttle-limit="3" 用于将 运行 您的步骤的线程。对于您的用例,您应该寻找一种方法来配置 JobLauncher 使用的 TaskExecutor 来限制并发作业的数量。

例如,您可以使用 ThreadPoolTaskExecutor 配置 JobLauncher,然后将 queueCapacity 设置为 3。使用此配置,如果您一次提交超过 3 个作业,第 4 个提交的作业将失败,您可以在 UI.

中显示错误

对于监控部分,您可以按照

中所述检查执行程序的队列大小