spring - 通过 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>
解决方案
throttle-limit="3"
您在步骤上设置的 是用于将运行您的步骤的线程。对于您的用例,您应该寻找一种方法来配置TaskExecutor
用于JobLauncher
限制并发作业数量的方法。
例如,您可以使用将 设置为 3JobLauncher
的 a进行配置。使用此配置,如果您一次提交超过 3 个作业,则第 4 个提交的作业将失败,您可以在 UI 中显示错误。ThreadPoolTaskExecutor
queueCapacity
对于监控部分,您可以检查执行器的队列大小,如Spring 框架监控 ThreadPoolTaskExecutor 队列大小中所述
推荐阅读
- java - 监视实例变量并在实例函数调用时返回值
- css - 我无法使用最大宽度媒体查询设置页面样式
- python - 初学者网页抓取代码迭代问题
- realm-list - 删除列表中的类
在领域迁移期间 - palantir-foundry - 如何在不使用 tranform 或 tranform_df 的情况下在 palantir Foundry 中导入单个数据集
- reactjs - react-firebaseui StyledFirebaseAuth 没有被编译
- visual-studio-code - 在vscode中如何向状态栏添加多个选项
- php - 如何在laravel中获取总和并分离每个ID的总数
- json - 谷歌识别的 JSON LD 格式的 Schema.org,但在网站控制台中显示错误
- compiler-errors - 为什么我的代码在混音时显示编译错误?