对于最新稳定版本,请使用Spring Batch Documentation 6.0.0spring-doc.cadn.net.cn

配置为Restart而作

在“配置和运行作业”部分,重启一个工作讨论过。重启对步骤产生多种影响,因此可能 需要某种特定的配置。spring-doc.cadn.net.cn

设定起始限制

有很多场景你可能想控制 a能 开始吧。例如,你可能需要配置特定的所以 只运行一次,因为这会使某些资源失效,而这些资源必须手动修复才能修复 又被跑了。这可以在步级层面配置,因为不同步可能有 不同的要求。一个只能执行一次的 可以作为 相同工作作为可以无限运行。spring-doc.cadn.net.cn

以下代码片段展示了 Java 中起始限制配置的一个示例:spring-doc.cadn.net.cn

Java 配置
@Bean
public Step step1(JobRepository jobRepository, PlatformTransactionManager transactionManager) {
	return new StepBuilder("step1", jobRepository)
				.<String, String>chunk(10, transactionManager)
				.reader(itemReader())
				.writer(itemWriter())
				.startLimit(1)
				.build();
}

以下代码片段展示了XML中起始限制配置的示例:spring-doc.cadn.net.cn

XML 配置
<step id="step1">
    <tasklet start-limit="1">
        <chunk reader="itemReader" writer="itemWriter" commit-interval="10"/>
    </tasklet>
</step>

前例所示的步骤只能运行一次。尝试再次运行 导致StartLimitExceededException被扔出去。注意,默认值为 起始限制为Integer.MAX价值.spring-doc.cadn.net.cn

重启已完成

对于可重启的工作,可能有一个或多个步骤必须始终遵循 跑,不管第一次成功与否。举个例子 可以是一个验证步骤,或者它在处理前清理资源。在 重启作业的正常处理,任何状态为完成(我是认真的 已成功完成),被跳过。设置允许-开始-如果-完成true覆盖该步骤,使该步骤始终运行。spring-doc.cadn.net.cn

以下代码片段展示了如何在 Java 中定义可重启作业:spring-doc.cadn.net.cn

Java 配置
@Bean
public Step step1(JobRepository jobRepository, PlatformTransactionManager transactionManager) {
	return new StepBuilder("step1", jobRepository)
				.<String, String>chunk(10, transactionManager)
				.reader(itemReader())
				.writer(itemWriter())
				.allowStartIfComplete(true)
				.build();
}

以下代码片段展示了如何在 XML 中定义可重启作业:spring-doc.cadn.net.cn

XML 配置
<step id="step1">
    <tasklet allow-start-if-complete="true">
        <chunk reader="itemReader" writer="itemWriter" commit-interval="10"/>
    </tasklet>
</step>

重启配置示例

以下 Java 示例展示了如何配置作业,使其步骤可以 重新 启动:spring-doc.cadn.net.cn

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

@Bean
public Step playerLoad(JobRepository jobRepository, PlatformTransactionManager transactionManager) {
	return new StepBuilder("playerLoad", jobRepository)
			.<String, String>chunk(10, transactionManager)
			.reader(playerFileItemReader())
			.writer(playerWriter())
			.build();
}

@Bean
public Step gameLoad(JobRepository jobRepository, PlatformTransactionManager transactionManager) {
	return new StepBuilder("gameLoad", jobRepository)
			.allowStartIfComplete(true)
			.<String, String>chunk(10, transactionManager)
			.reader(gameFileItemReader())
			.writer(gameWriter())
			.build();
}

@Bean
public Step playerSummarization(JobRepository jobRepository, PlatformTransactionManager transactionManager) {
	return new StepBuilder("playerSummarization", jobRepository)
			.startLimit(2)
			.<String, String>chunk(10, transactionManager)
			.reader(playerSummarizationSource())
			.writer(summaryWriter())
			.build();
}

以下XML示例展示了如何配置作业,使其步骤可以为 重新 启动:spring-doc.cadn.net.cn

XML 配置
<job id="footballJob" restartable="true">
    <step id="playerload" next="gameLoad">
        <tasklet>
            <chunk reader="playerFileItemReader" writer="playerWriter"
                   commit-interval="10" />
        </tasklet>
    </step>
    <step id="gameLoad" next="playerSummarization">
        <tasklet allow-start-if-complete="true">
            <chunk reader="gameFileItemReader" writer="gameWriter"
                   commit-interval="10"/>
        </tasklet>
    </step>
    <step id="playerSummarization">
        <tasklet start-limit="2">
            <chunk reader="playerSummarizationSource" writer="summaryWriter"
                   commit-interval="10"/>
        </tasklet>
    </step>
</job>

上述示例配置是加载足球信息的工作 游戏并对它们进行了总结。它包含三个步骤:玩家加载,游戏加载玩家总结.这玩家加载step 从平面文件加载玩家信息, 而游戏加载Step对游戏也是如此。最后一步,玩家总结然后根据 提供游戏。假设文件由玩家加载必须仅装载 只有一次游戏加载可以加载特定目录中找到的任何游戏, 在成功加载到数据库后删除它们。因此, 这玩家加载步步不包含额外的配置。它可以从任意数字开始 如果完成,则跳过了。这游戏加载不过,步骤必须执行 每次都是因为自上次运行以来增加了额外的文件。它已经允许-开始-如果-完成设置为true总是被开始。(假设 游戏加载到的数据库表上必须有一个进程指示器,以确保 新游戏可以通过总结步骤正确找到)。总结步骤, 工作中最重要的部分配置为起始限制为2。这 有用的是,如果该步骤持续失败,会返回一个新的退出代码到 操作员控制作业执行,且必须手动启动才能重新启动 干预已经发生。spring-doc.cadn.net.cn

本职位为本文档提供了示例,且与足球工作在样本项目中发现。

本节剩余部分描述了三次运行中发生的事情足球工作例。spring-doc.cadn.net.cn

  1. 玩家加载成功运行并完成,增加了400名玩家球员桌子。spring-doc.cadn.net.cn

  2. 游戏加载运行并处理11个游戏数据文件,加载其内容 进入游戏桌子。spring-doc.cadn.net.cn

  3. 玩家总结开始处理,5分钟后失败。spring-doc.cadn.net.cn

第二次运行:spring-doc.cadn.net.cn

  1. 玩家加载不运行,因为它已经成功完成,允许-开始-如果-完成false(默认)。spring-doc.cadn.net.cn

  2. 游戏加载再次运行并处理另外两个文件,将其内容加载到游戏表格也存在(并带有进程指示器表示尚未完成) 处理)。spring-doc.cadn.net.cn

  3. 玩家总结开始处理所有剩余的游戏数据(通过 过程指示器)并在30分钟后再次失败。spring-doc.cadn.net.cn

  1. 玩家加载不运行,因为它已经成功完成,允许-开始-如果-完成false(默认)。spring-doc.cadn.net.cn

  2. 游戏加载再次运行并处理另外两个文件,将其内容加载到游戏表格也存在(并带有进程指示器表示尚未完成) 处理)。spring-doc.cadn.net.cn

  3. 玩家总结未启动,作业立即终止,因为 第三次处决玩家总结,且极限仅为2。要么是极限 必须被提升或工作必须作为新的执行JobInstance.spring-doc.cadn.net.cn