首页 > 解决方案 > 通过 spring 批处理监控当前正在运行的进程,并通知是否达到油门限制

问题描述

我有一个 Spring Boot 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>

标签: springspring-bootspring-batchbatch-processing

解决方案


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

例如,您可以使用将 设置为 3JobLauncher的 a进行配置。使用此配置,如果您一次提交超过 3 个作业,则第 4 个提交的作业将失败,您可以在 UI 中显示错误。ThreadPoolTaskExecutorqueueCapacity

对于监控部分,您可以检查执行器的队列大小,如Spring 框架监控 ThreadPoolTask​​Executor 队列大小中所述


推荐阅读