配置作业

有多种实现方式工作接口。然而 这些实现被抽象化在提供的构建器(用于 Java 配置)或 XML 后面 命名空间(用于基于XML的配置)。以下示例展示了 Java 和 XML 的配置:spring-doc.cadn.net.cn

@Bean
public Job footballJob(JobRepository jobRepository) {
    return new JobBuilder("footballJob", jobRepository)
                     .start(playerLoad())
                     .next(gameLoad())
                     .next(playerSummarization())
                     .build();
}

一个工作(通常,任何其中)需要一个JobRepository.spring-doc.cadn.net.cn

上述例子说明了工作由三位组成实例。与工作相关的内容 构建器还可以包含其他有助于并行化的元素(分裂), 声明式流量控制(决定),以及流定义的外部化().spring-doc.cadn.net.cn

有多种实现方式工作接口。然而,命名空间抽象化了配置上的差异。它已经 只需三个依赖关系:一个名称,JobRepository,以及实例。 以下示例可生成足球工作:spring-doc.cadn.net.cn

<job id="footballJob">
    <step id="playerload"          parent="s1" next="gameLoad"/>
    <step id="gameLoad"            parent="s2" next="playerSummarization"/>
    <step id="playerSummarization" parent="s3"/>
</job>

前面的例子使用父豆定义来创建步骤。 关于声明特定步骤详情的更多选项,请参见步数配置部分。XML 命名空间 默认引用带有身份证jobRepository哪 是合理的默认选择。不过,你可以明确覆盖这个默认设置:spring-doc.cadn.net.cn

<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>

除了步骤外,作业配置还可以包含其他元素 这有助于并行化(<分裂>), 声明式流量控制(<决定>),以及 流定义的外部化 (<流量/>).spring-doc.cadn.net.cn

可重启性

执行批处理作业时的一个关键问题是工作当它 重新 启动。一工作如果作业执行对于特定 已经存在JobInstance.理想情况下,所有工作都应该能开始 从他们停下的地方继续,但有些场景是不可能的。在这种情况下,完全取决于开发商是否能确保新的JobInstance被创造出来。不过,Spring Batch确实提供了一些帮助。如果工作绝不应该 重启,但应该始终作为新程序的一部分运行JobInstance,你可以设置 可重启财产false.spring-doc.cadn.net.cn

以下示例展示了如何设置可重启场转false在爪哇语中:spring-doc.cadn.net.cn

Java 配置
@Bean
public Job footballJob(JobRepository jobRepository) {
    return new JobBuilder("footballJob", jobRepository)
                     .preventRestart()
                     ...
                     .build();
}

以下示例展示了如何设置可重启场转false以XML形式表示:spring-doc.cadn.net.cn

XML 配置
<job id="footballJob" restartable="false">
    ...
</job>

换句话说,就是设定可重启false意思是“这个”工作不支持重新开始。”重启工作那不是 可重启导致JobRestartException自 被扔出去。 以下Junit代码会触发该异常:spring-doc.cadn.net.cn

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
}

首次尝试创造作业执行对于不可重启 工作没有问题。然而,第二种 尝试投掷JobRestartException.spring-doc.cadn.net.cn

拦截作业执行

在执行过程中工作,收到各种通知可能会很有用 在生命周期中发生事件,以便可以运行自定义代码。简易工作通过调用JobListener(职业倾听者)在适当的时候:spring-doc.cadn.net.cn

public interface JobExecutionListener {

    void beforeJob(JobExecution jobExecution);

    void afterJob(JobExecution jobExecution);
}

你可以添加JobListeners转给简易工作通过让听众投入其中。spring-doc.cadn.net.cn

以下示例展示了如何在 Java 作业定义中添加监听器方法:spring-doc.cadn.net.cn

Java 配置
@Bean
public Job footballJob(JobRepository jobRepository) {
    return new JobBuilder("footballJob", jobRepository)
                     .listener(sampleListener())
                     ...
                     .build();
}

以下示例展示了如何在XML作业定义中添加监听器元素:spring-doc.cadn.net.cn

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>

注意工作之后无论成功还是 失败工作.如果你需要判断成功或失败,你可以获得这些信息 来自作业执行:spring-doc.cadn.net.cn

public void afterJob(JobExecution jobExecution){
    if (jobExecution.getStatus() == BatchStatus.COMPLETED ) {
        //job success
    }
    else if (jobExecution.getStatus() == BatchStatus.FAILED) {
        //job failure
    }
}

对应该接口的注释有:spring-doc.cadn.net.cn

继承父母职位

如果一组工作有相似但不一样 配置相同,定义一个“父”可能有帮助工作从中工作实例可以继承属性。与类别相似 爪哇的继承,一个“孩子”工作结合 其元素和属性与父本的关系。spring-doc.cadn.net.cn

在以下例子中,baseJob(基地工作)是一个抽象工作定义仅定义一个列表 听众。这工作 (工作1)是一个混凝土 定义 继承了从 的听者列表baseJob(基地工作)并合并 它拥有自己的听众名单,以制作工作有两个听众和一个听众 (第一步).spring-doc.cadn.net.cn

<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>

详情请参见“继承父方步骤”部分。spring-doc.cadn.net.cn

JobParametersValidator

在XML命名空间中声明的作业,或使用任意子类摘要工作可以选择性地为作业参数在 运行。这在你需要声明某项工作时非常有用 以所有强制参数开始。有一个DefaultJobParametersValidator你可以用来限制组合 这些参数都是简单的强制和可选参数。对于更复杂的情况 约束,你可以自己实现接口。spring-doc.cadn.net.cn

验证器的配置通过 Java 构建器支持:spring-doc.cadn.net.cn

@Bean
public Job job1(JobRepository jobRepository) {
    return new JobBuilder("job1", jobRepository)
                     .validator(parametersValidator())
                     ...
                     .build();
}

验证器的配置通过子节点支持XML命名空间 工作元素,如下示例所示:spring-doc.cadn.net.cn

<job id="job1" parent="baseJob3">
    <step id="step1" parent="standaloneStep"/>
    <validator ref="parametersValidator"/>
</job>

你可以将验证器指定为引用(如前所述)或嵌套豆 定义Namespace。spring-doc.cadn.net.cn