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