【问题标题】:Spring Batch Flow Job - control number of jobs running simultaneouslySpring Batch Flow Job - 控制同时运行的作业数量
【发布时间】:2018-01-31 19:21:46
【问题描述】:

我有一个复杂的长时间运行的流,我将基于 Spring Batch Flow Job 实现它。

我的 REST API 将等待传入的请求,然后(基于每个请求)启动新的作业执行。

现在我很担心服务器资源,因为传入请求的数量很大,我想控制同时运行的作业数量。有什么方法可以告诉 Spring Batch 同时运行不超过确切数量的作业(比如说 5 个)并将其余作业放入队列以便稍后执行,例如,前 5 个作业中的一个将完成了吗?

【问题讨论】:

    标签: spring spring-batch


    【解决方案1】:

    在 Spring Batch 中没有办法做到这一点。这样做的原因是并发作业的数量实际上是 Spring Batch 专门避免解决的编排问题(允许您与任何您想要的集成)。

    话虽如此,控制您所描述的内容的能力可以通过实现一个工作队列来存储运行作业的请求,并让服务在另一个地方接收这些请求,从而以相对简单的方式完成结尾。可以使用 Spring Integration 组件轻松控制并发性,以防止系统过载(假设您有一种机制来处理相关队列大小)。

    【讨论】:

    • 感谢您的回答。能否请您指出如何使用 Spring Integration 控制并发?
    • 使用ExecutorChannel,您可以配置一个TaskExecutor 来控制并发。例如,您可以使用具有有限线程数的ThreadPoolTaskExecutor
    猜你喜欢
    • 2017-11-09
    • 1970-01-01
    • 1970-01-01
    • 2021-06-25
    • 1970-01-01
    • 1970-01-01
    • 2012-06-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多