gpt4 book ai didi

spring-batch - 如何保证一个作业只能同时运行一个JobInstance?

转载 作者:行者123 更新时间:2023-12-04 18:12:52 31 4
gpt4 key购买 nike

Spring Batch文档说:“Spring Batch不会尝试阻止它们同时运行”(http://static.springsource.org/spring-batch/reference/html/single/index.html)。

但是,如果我尝试运行一个作业并且该作业有一个实例正在运行,我想得到一个错误。是否可以?

我正在使用Spring Batch 2.1.8。

最佳答案

如果您知道后续作业将排队,则可以使用TaskExecutor。

  • 实例化具有最大池大小(例如500)的任务执行器
    <task:executor id="poolTaskExecutor" pool-size="500"/>
  • ThrottledTaskexecutor

    ThrottledTaskExecutor一次只能将给定数量的任务传递给poolTask​​Executor之上。
    此类可以在下面的 Spring github中找到,或者您可以下载maven构件。
    https://github.com/SpringSource/spring-batch-admin/blob/master/spring-batch-admin-manager/src/main/java/org/springframework/batch/admin/util/ThrottledTaskExecutor.java
  • 实例化ThrottledTaskExecutor
    <bean id="throttledTaskExecutor" 
    class="org.springframework.batch.admin.util.ThrottledTaskExecutor">
    <property name="taskExecutor" ref="poolTaskExecutor" />
    <property name="throttleLimit" value="1"/>
    </bean>
  • ThrottledJobLauncher
    <bean id="throttledJobLauncher"
    class="org.springframework.batch.core.launch.support.SimpleJobLauncher">
    <property name="jobRepository" ref="jobRepository" />
    <property name="taskExecutor" ref="throttledTaskExecutor" />
    </bean>

  • 使用上面的 throttle JobLauncher启动的所有作业一次只能运行一个实例。这更加灵活,您可以使用给定的thresholddLimit限制一个或多个作业。

    实际上,以上poolTask​​Executor定义和ThrottledTaskexecutor类来自spring-batch-admin。这些是开箱即用的功能。您只需要定义limit的ThrottledTaskExecutor并将其包含在您的工作的jobLauncher中即可。

    关于spring-batch - 如何保证一个作业只能同时运行一个JobInstance?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9787470/

    31 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com