Java Spring批处理:针对不同作业的不同作业启动器

Java Spring批处理:针对不同作业的不同作业启动器,java,spring,spring-batch,spring-batch-admin,Java,Spring,Spring Batch,Spring Batch Admin,我有两种不同的工作(实际上更多,但为了简单起见,假设2)。每个作业都可以与另一个作业并行运行,但同一作业的每个实例都应该按顺序运行(否则实例将相互占用资源) 基本上,我希望每个作业都有自己的作业实例队列。我想我可以使用两个不同的线程池作业启动程序(每个都有一个线程)并将一个作业启动程序与每个作业关联起来 从Spring Batch Admin web UI启动作业时,有没有一种方法可以做到这一点?使用shell脚本可以并行启动不同的作业 在每个命令行的末尾添加一个“&”。shell将与自己的执行

我有两种不同的工作(实际上更多,但为了简单起见,假设2)。每个作业都可以与另一个作业并行运行,但同一作业的每个实例都应该按顺序运行(否则实例将相互占用资源)

基本上,我希望每个作业都有自己的作业实例队列。我想我可以使用两个不同的线程池作业启动程序(每个都有一个线程)并将一个作业启动程序与每个作业关联起来


从Spring Batch Admin web UI启动作业时,有没有一种方法可以做到这一点?使用shell脚本可以并行启动不同的作业

在每个命令行的末尾添加一个“&”。shell将与自己的执行并行执行它们。

@ahbutfore

<bean id="specificJobLauncher" class="org.springframework.batch.core.launch.support.SimpleJobLauncher">
    <property name="jobRepository" ref="jobRepository"/>
    <property name="taskExecutor">
        <task:executor id="singleThreadPoolExecutor" pool-size="1"/>
    </property>
</bean>

<job id="queueSpecificJob">
    <step id="specificJobStep">
        <job ref="specificJob" job-launcher="specificJobLauncher" job-parameters-extractor="parametersExtractor" />
    </step>
</job>
这些工作是如何触发的?你有可能使用石英触发器吗? 如果是,在您的所有工作中实现/扩展org.quartz.StatefulJob接口是否对您有帮助

请参见此处的SpringBeans配置:。检查org.trpr.platform.batch.impl.spring.job.BatchJob的源代码


您可以使用合适的“领导人选举”实现进行更复杂的序列化(包括跨Spring批处理节点)。我在我的项目中使用了Netflix Curator(一种Apache Zookeeper配方)。这里有一些提示:

有一种方法可以为特定作业指定特定的作业启动程序,但我发现唯一的方法是使用作业步骤

如果您有一个名为“specificJob”的作业,这将创建另一个作业“queueSpecificJob”,因此当您通过Quartz或SpringBatch web admin启动它时,它将排队执行“specificJob”

<bean id="specificJobLauncher" class="org.springframework.batch.core.launch.support.SimpleJobLauncher">
    <property name="jobRepository" ref="jobRepository"/>
    <property name="taskExecutor">
        <task:executor id="singleThreadPoolExecutor" pool-size="1"/>
    </property>
</bean>

<job id="queueSpecificJob">
    <step id="specificJobStep">
        <job ref="specificJob" job-launcher="specificJobLauncher" job-parameters-extractor="parametersExtractor" />
    </step>
</job>


我认为shell脚本与Spring批处理无关shell脚本只是用于将Spring批处理作业作为并行作业调用。这并没有解决作业排队的问题。我特别不希望同一作业的作业实例并行运行,我希望它们按顺序运行。