此版本仍在开发中,尚未被视为稳定版本。对于最新的稳定版本,请使用 Spring Batch 文档 5.1.2! |
此版本仍在开发中,尚未被视为稳定版本。对于最新的稳定版本,请使用 Spring Batch 文档 5.1.2! |
Job
接口有多种实现。然而
这些实现抽象在提供的构建器(用于 Java 配置)或 XML 后面
namespace (用于基于 XML 的配置)。以下示例显示了 Java 和 XML 配置:
-
Java
-
XML
@Bean
public Job footballJob(JobRepository jobRepository) {
return new JobBuilder("footballJob", jobRepository)
.start(playerLoad())
.next(gameLoad())
.next(playerSummarization())
.build();
}
A(通常还包括其中的任何一个)需要一个 .这
的配置通过 Java 配置
进行处理。Job
Step
JobRepository
JobRepository
前面的示例说明了由三个实例组成的 a。工作相关
构建器还可以包含有助于并行化 () 的其他元素,
声明式流控制 (),以及流定义 () 的外部化。Job
Step
Split
Decision
Flow
Job
接口有多种实现。但是,命名空间抽象出了配置中的差异。它有
只有三个必需的依赖项:名称、 和实例列表。
以下示例创建一个 :JobRepository
Step
footballJob
<job id="footballJob">
<step id="playerload" parent="s1" next="gameLoad"/>
<step id="gameLoad" parent="s2" next="playerSummarization"/>
<step id="playerSummarization" parent="s3"/>
</job>
前面的示例使用父 Bean 定义来创建步骤。
请参阅 步骤配置 部分,了解内联声明特定步骤详细信息时的更多选项。XML 命名空间
默认引用具有 of 的存储库,其中
是合理的默认值。但是,您可以显式覆盖此默认值:id
jobRepository
<job id="footballJob" job-repository="specialRepository">
<step id="playerload" parent="s1" next="gameLoad"/>
<step id="gameLoad" parent="s3" next="playerSummarization"/>
<step id="playerSummarization" parent="s3"/>
</job>
除了步骤之外,作业配置还可以包含其他元素
有助于并行化 ()、
声明式流控制 (),以及
流定义的外部化
().<split>
<decision>
<flow/>
可重启性
执行批处理作业时的一个关键问题涉及
重新 启动。如果特定 已存在 a,则启动 a 被视为“重新启动”。理想情况下,所有作业都应该能够启动
从他们离开的地方开始,但在某些情况下这是不可能的。在这种情况下,完全由开发人员来确保创建新的 JobInstance
。但是,Spring Batch 确实提供了一些帮助。如果 a 不应该是
重新启动,但应始终作为 new 的一部分运行,您可以设置
restartable 属性设置为 。Job
Job
JobExecution
JobInstance
Job
JobInstance
false
-
Java
-
XML
以下示例演示如何在 Java 中将字段设置为 :restartable
false
@Bean
public Job footballJob(JobRepository jobRepository) {
return new JobBuilder("footballJob", jobRepository)
.preventRestart()
...
.build();
}
以下示例演示如何在 XML 中将字段设置为 :restartable
false
<job id="footballJob" restartable="false">
...
</job>
换句话说,设置为 to 意味着 “this does not support being started again”。重新启动 不是
restartable 会导致
被扔掉。
以下 Junit 代码会导致引发异常:restartable
false
Job
Job
JobRestartException
Job job = new SimpleJob();
job.setRestartable(false);
JobParameters jobParameters = new JobParameters();
JobExecution firstExecution = jobRepository.createJobExecution(job, jobParameters);
jobRepository.saveOrUpdate(firstExecution);
try {
jobRepository.createJobExecution(job, jobParameters);
fail();
}
catch (JobRestartException e) {
// expected
}
第一次尝试为 不可重启
job 不会引起任何问题。然而,第二个
attempt 会引发 .JobExecution
JobRestartException
拦截任务执行
在执行 的过程中,通知各种 可能会很有用
事件,以便可以运行自定义代码。 通过在适当的时间调用 A 来允许此操作:Job
SimpleJob
JobListener
public interface JobExecutionListener {
void beforeJob(JobExecution jobExecution);
void afterJob(JobExecution jobExecution);
}
您可以通过在作业上设置侦听器来添加到 。JobListeners
SimpleJob
-
Java
-
XML
以下示例说明如何将侦听器方法添加到 Java 作业定义中:
@Bean
public Job footballJob(JobRepository jobRepository) {
return new JobBuilder("footballJob", jobRepository)
.listener(sampleListener())
...
.build();
}
以下示例演示如何将侦听器元素添加到 XML 作业定义中:
<job id="footballJob">
<step id="playerload" parent="s1" next="gameLoad"/>
<step id="gameLoad" parent="s2" next="playerSummarization"/>
<step id="playerSummarization" parent="s3"/>
<listeners>
<listener ref="sampleListener"/>
</listeners>
</job>
请注意,无论成功还是
失败的 .如果需要确定成功或失败,可以获取该信息
从 :afterJob
Job
JobExecution
public void afterJob(JobExecution jobExecution){
if (jobExecution.getStatus() == BatchStatus.COMPLETED ) {
//job success
}
else if (jobExecution.getStatus() == BatchStatus.FAILED) {
//job failure
}
}
与此接口对应的注解是:
-
@BeforeJob
-
@AfterJob
从父作业继承
如果一组 Job 具有相似但不相似的
相同的配置,定义一个 “parent” 可能会有所帮助,具体实例可以从中继承属性。与 class 相似
继承,则“子”结合了
它的元素和属性与父级的 Elements 和 Attributes 一起使用。Job
Job
Job
在下面的示例中,是一个抽象定义,它只定义了
听众。() 是具体的
继承侦听器列表并合并的定义
it 替换为自己的侦听器列表,以生成具有两个侦听器和一个 () 的 a。baseJob
Job
Job
job1
baseJob
Job
Step
step1
<job id="baseJob" abstract="true">
<listeners>
<listener ref="listenerOne"/>
<listeners>
</job>
<job id="job1" parent="baseJob">
<step id="step1" parent="standaloneStep"/>
<listeners merge="true">
<listener ref="listenerTwo"/>
<listeners>
</job>
请参阅 从父步骤继承 有关更多详细信息的部分。
JobParametersValidator (作业参数验证器)
在 XML 命名空间中声明的作业或使用 的任何子类可以选择为
运行。例如,当您需要断言作业
启动其所有必需参数。有一个 可用于约束组合
简单的强制和可选参数。对于更复杂的
constraints,您可以自行实现接口。AbstractJob
DefaultJobParametersValidator
-
Java
-
XML
验证器的配置通过 Java 构建器支持:
@Bean
public Job job1(JobRepository jobRepository) {
return new JobBuilder("job1", jobRepository)
.validator(parametersValidator())
...
.build();
}
验证器的配置是通过 XML 命名空间通过子 元素,如下例所示:
<job id="job1" parent="baseJob3">
<step id="step1" parent="standaloneStep"/>
<validator ref="parametersValidator"/>
</job>
您可以将验证器指定为引用(如前所述)或嵌套 Bean
定义。beans