我正在寻找一种方法,在ItemReader
侦听器方法中使用@AfterStep
来检查数据库中是否有批处理作业中正在处理的项目的特定状态。 (这些项是另一个表中一行的子对象,并且在批处理作业步骤中不处理这些父对象。)我目前正在使用JdbcCursorItemReader
对H2数据库执行SQL。
但是,我不确定如何从结果集中读取一行,或者我是否需要以编程方式打开/关闭JdbcCursorItemReader
,因为我只是使用{{1接口来表示它。我可以访问这种方式的唯一方法是ItemReader<T>
。我应该转换为read()
,并打开/阅读每个项目/关闭?是否可以从步骤执行对象中获取块大小以便以块的形式处理它们?
我意识到这不是一个理想的方法,但我需要能够在每一步之后执行此操作,并且IMO会不必要地使Java配置复杂化,以便在每个步骤之后添加单独的RPW步骤现有的步骤。
简而言之,我想在JdbcCursorItemReader<T>
听众中做的是:
@AfterStep
来编写错误的项目来实现。)ItemWriter
,或者数据库能够被读取&#34;脏&#34;) - 使用ItemWriter
读入所有父对象所有子对象都处于FAILED状态。ItemReader
为父级写入。但是,我不知道如何从ItemWriter
(并正确维护光标)中读取项目,无论是单独还是集合。 ItemReader
方法在步骤配置中构建阅读器,而Spring Batch魔术完成剩下的工作。在侦听器方法中使用StepBuilderFactory.reader()
看起来很简单,ItemWriter
似乎正常工作。我只是希望有人知道如何以这种方式正确阅读write(Collection<T> items)
中的项目。
提前致谢!
答案 0 :(得分:0)
是的,投射是一种选择。这样的事情应该可以工作:
if (reader instanceof ItemStreamReader) {
(ItemStreamReader) reader.open(new ExecutionContext());
}
while((in = reader.read()) != null) {
<do what you need here>
}
if (reader instanceof ItemStreamReader) {
(ItemStreamReader) reader.close();
}