Spring Batch:执行工作的确切程度如何?

时间:2015-08-16 04:18:55

标签: java spring spring-batch

正如标题所说,整个批处理作业究竟如何与Spring Batch一起使用?我理解(当然,如果我错了,请纠正我),那里有一个存储作业的存储库,然后每个作业都有步骤,每个步骤都是一个tasklet或ItemReaders和ItemProcessors的组合填充块后,接着是ItemWriter。

我不明白的是这一切在实际代码中究竟是什么样的;我一直在阅读文档并查看示例,但我迷失了。我究竟如何在任何时间/任何地方告诉工作?有一百万个类以" Job"开头,我如何将它们中的少量一起用于存储我定义的作业,然后在/何时运行它们?此外,我看到的所有示例都是完全/大部分基于XML,但我想尽可能少地使用XML。

对我来说另一个令人困惑的大问题是,ItemReader / Processor / Writers究竟是如何知道他们正在使用的项目/块项目?想象我自己实现ItemProcessor并不是太牵强,为此,我显然需要访问它正在处理的项目来处理它,或者对于ItemWriter,我&# 39; d想要访问它想要写的项目块。

2 个答案:

答案 0 :(得分:2)

Mkyong.com有一个不错的春天batch tutorials,它提供了一些相当明确的工作配置实际情况的例子。请参阅基本示例here。不幸的是,这些示例主要是XML格式。这里有一个blog post,其中有一个使用java配置的例子。

就项目阅读器/处理器/写入器类型而言。您通常会有一个阅读器和至少一个处理器/写入器组合。两者都不是必需的。

在理解每个界面方面,请查看界面 - 他们可能会帮助您清理界面。例如,这里是ItemWriter的接口:

void write(java.util.List<? extends T> items)

http://docs.spring.io/spring-batch/trunk/apidocs/org/springframework/batch/item/ItemWriter.html

请注意,需要编写一批项目。处理器通常逐项工作。可以对读者进行分页(例如,通过实现AbstractPagingItemReader),并在实际执行提取之前收集迭代中的项目(例如,对数据库进行分页查询)。

答案 1 :(得分:1)

回答你的基本问题: -

1)每个作业都有一个id,你将使用这个id识别要执行的作业 2)作业通常由多个步骤组成,每个步骤都有一个名为next的属性。在下一个属性中,您将定义下一步要执行的步骤的id 3)每一步都有一个阅读器,处理器和写入器,以防你的步骤不是这些,你可以在一个tasklet中定义它。
4)定义Reader和Writer时,必须定义它将获取或写入的数据类型。例如,在BatchItemReader中定义一个RowMapper 5)您可以使用JobExecutionDecider在加载作业定义后决定需要执行哪个步骤。对于剩余的步骤,它可以使用下一个属性。

就像在Spring中一样,您的应用程序上下文只需要知道您的作业定义,因为它需要知道要加载的bean定义。

Which job to execute:使用了工作定义的ID Which step to execute in Job:第一步,可以使用JobExecutionDecider,否则使用下一个属性将与下一步的id一起使用。
What is there in a step:读取数据的读取器,处理器对读取的数据进行处理,最后写入读取数据。如果步骤执行除此之外的操作,请在tasklet中定义它。