通过 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.
中显示错误
对于监控部分,您可以按照
中所述检查执行程序的队列大小
我有一个 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.
对于监控部分,您可以按照