Spring Batch文档说:“ Spring Batch将不会阻止它们同时运行”(http://static.springsource.org/spring-batch/reference/html-single /index.html)。
但是如果我尝试运行一个作业并且有一个该作业的实例正在运行,我想得到一个错误。有可能吗?
我正在使用Spring Batch 2.1.8。
答案 0 :(得分:5)
如果您知道后续作业将排队,则可以使用TaskExecutor。
实例化具有最大池大小的任务执行程序,例如500
<task:executor id="poolTaskExecutor" pool-size="500"/>
ThrottledTaskexecutor
ThrottledTaskExecutor一次只会将给定数量的任务传递给 poolTaskExecutor 。 这个类可以在下面的spring github中找到,或者你可以下载maven artifact。 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>
使用上面的 throttledJobLauncher 启动的所有作业一次只能运行一个实例。这更灵活,您可以使用给定的throttledLimit限制一个或多个作业。
实际上,poolTaskExecutor定义和ThrottledTaskexecutor类来自spring-batch-admin。这些都是开箱即用的功能。您只需要定义具有限制的ThrottledTaskExecutor并将其包含在作业的jobLauncher中。
答案 1 :(得分:2)