当前位置: 首页 > 知识库问答 >
问题:

Spring批处理作业步骤示例

翁鸿远
2023-03-14

我正在尝试在Spring批处理中并行运行多个作业。在谷歌上搜索了很多之后,我遇到了JobStep。有没有人使用过JobStep可以解释如何使用它来并行运行作业,或者有没有其他方法可以并行运行2个独立的作业,即当我启动批处理时,2个作业应该开始并行运行。我的要求就像

 <batch:job id="JobA" incrementer="runIdIncrementer">
            <batch:step id="abc">
                <batch:tasklet transaction-manager="transactionManager">
                    <batch:chunk reader="ReaderA" writer="WriterA" processor="ProcessorA" />
                </batch:tasklet>
          </batch:step>
    </batch:job>

    <batch:job id="JobB" incrementer="runIdIncrementer">
            <batch:step id="def">
                <batch:tasklet transaction-manager="transactionManager">
                    <batch:chunk reader="ReaderB" writer="WriterB" processor="ProcessorB" />
                </batch:tasklet>
          </batch:step>
    </batch:job>

当我的应用html" target="_blank">程序启动时,两个作业都应该开始运行。使用spring batch是否可以这样做

编辑:我甚至试过这种方法

<batch:job id="ParallelJob" incrementer="runIdIncrementer" restartable="true">
            <batch:split id="parallelprocessing" task-executor="taskExecutor">
                <batch:flow>
                    <batch:step id="ParallelJob.step1" >
                            <batch:job ref="JobA" job-launcher="jobLauncher" job-parameters-extractor="jobParametersExtractor"/>
                    </batch:step>       
                </batch:flow>
                <batch:flow>
                    <batch:step id="ParallelJob.step2" >
                            <batch:job ref="JobB" job-launcher="jobLauncher" job-parameters-extractor="jobParametersExtractor"/>
                    </batch:step>       
                </batch:flow>
            </batch:split>
        </batch:job> 


<batch:job id="JobA" restartable="true">
        <batch:step id="abc">
            <batch:tasklet >
                <batch:chunk reader="reader" writer="writer" processor="processor"  />
            </batch:tasklet>
      </batch:step>

    </batch:job>

<batch:job id="JobB" restartable="true">
        <batch:step id="abc">
            <batch:tasklet >
                <batch:chunk reader="reader" writer="writer" processor="processor"  />
            </batch:tasklet>
      </batch:step>

    </batch:job>

我面临着例外。springframework。豆子。工厂NonuniqueBeandDefinitionException:未定义[org.springframework.batch.core.Job]类型的符合条件的bean:应为单个匹配bean,但找到了3个:ParallelJob、JobA、JobB。我正在使用commandLineJobRunner开始工作,并将jobId传递给asParallelJob

共有1个答案

慕容昊焜
2023-03-14

定义:

<batch:job id="globalJob">
<batch:split id="StepOne">
    <batch:flow>
    <batch:step id="step1" >
        <batch:job ref="jobRef1"/>
    </batch:step>

    </batch:flow>
    <batch:flow>
    <batch:step id="step2">
        <batch:job ref="jobRef2"/>
    </batch:step>
    </batch:flow>
</batch:split>
</batch:job>

随时执行作业:

@Autowired
JobLauncher jobLauncher;

@Autowired
@Qualifier("globalJob")
Job globalJob;

 @Override
public void executeGlobalJob() throws NoSuchJobException, JobInstanceAlreadyExistsException, JobParametersInvalidException {

    try {
        jobLauncher.run(globalJob,new JobParameters());
    } catch (JobExecutionAlreadyRunningException e) {
        throw new JobInstanceAlreadyExistsException("JobExecutionAlreadyRunningException",e);
    } catch (JobRestartException e) {
        throw new JobInstanceAlreadyExistsException("JobRestartException",e);
    } catch (JobInstanceAlreadyCompleteException e) {
        throw new JobInstanceAlreadyExistsException("JobInstanceAlreadyCompleteException",e);
    }
}

}

在应用程序启动后执行作业只需设置属性:

spring.batch.job.names=globalJob
 类似资料:
  • 你可以点击 “设置任务计划”来为一个批处理作业设置计划和点击 “删除任务计划”来移除计划。 如果你在“常规”选项卡选择“不管用户是否登录都要运行”,当你保存计划时你必须在 Windows 计划程序提供你的操作系统用户密码。 【注意】请在设置计划之前保存批处理作业。在运行计划之前,在连接窗口内的密码必须保存。

  • 添加工作到批处理作业 在“常规”选项卡的底部窗格中,选择工作类型,然后如有需要浏览连接、数据库和/或模式以找出你想运行的工作。 你可以双击或拖放工作来将工作从“可用的工作”列表移动到“已选择的工作”列表。若要从已选择的工作列表删除工作,请以相同的方式移除它们。你可以在一个批处理作业中运行来自不同服务器的配置文件。 若要重新排序工作的序列,可使用 “上移”或 “下移”按钮。 如果你想备份整个服务器,

  • 你可以点击 来为一个批处理作业设置计划和点击 来移除计划。 “小时”和“分钟”字段必需指定。如果字段没有任何值,将会使用全部值。例如,如果“星期”字段是空的,系统会视为这个字段被输入“0, 1, 2, 3, 4, 5, 6”。使用逗号以分隔值。例如,0, 1, 3, 6。使用连字号 (-),不含空格以指示值。例如,0-4。 例子:批处理作业将会在每个工作日下午 6:30 运行。 【注意】请在设置计

  • 添加工作到批处理作业 在“常规”选项卡的底部窗格中,选择工作类型,然后如有需要浏览连接、数据库和/或模式以找出你想运行的工作。 你可以点击 或 来将已选择的工作或所有工作从“可用的工作”列表移动到“已选择的工作”列表。若要从已选择的工作列表删除已选择工作或所有工作,请点击 或 。你可以在一个批处理作业中运行来自不同服务器的配置文件。 若要重新排序工作的序列,可在已选择的工作列表中拖拉工作到所需的位

  • 你可以点击 “设置任务计划”来为一个批处理作业设置计划和点击 “删除任务计划”来移除计划。 “小时”和“分钟”字段必需指定。如果字段沒有任何值,将会使用全部值。例如,如果“星期”字段是空的,系统会视为这个字段被输入“0, 1, 2, 3, 4, 5, 6”。使用逗号以分隔值。例如,0, 1, 3, 6。使用连字号 (-),不含空格以指示值。例如,0-4。 例子:批处理作业将会在每个工作日下午 6:

  • 添加工作到批处理作业 在“常规”选项卡的底部窗格中,选择工作类型,然后如有需要浏览连接、数据库和/或模式以找出你想运行的工作。 你可以双击或拖放工作来将工作从“可用的工作”列表移动到“已选择的工作”列表。若要从已选择的工作列表删除工作,请以相同的方式移除它们。你可以在一个批处理作业中运行来自不同服务器的配置文件。 若要重新排序工作的序列,可使用 “上移”或 “下移”按钮。 如果你想备份整个服务器,