2016-01-05 38 views
1

我在我的应用程序中使用Spring批处理。我有一个需求,在开始处理行之前,我需要在数据库上执行更新查询。读取之后,在映射阶段,我根据从dataBase, 中读取的数据填充列表,并在开始该过程之前,我需要根据此列表更新数据库中的表。 这个查询只需要执行一次,这就是beforeProcess()方法不相关的原因,因为它是为每一行调用的。Spring批处理执行查询在启动过程之前

+0

您的要求不是很清楚,但我认为您可以将预读更新查询分隔成一个tasklet步骤。如果我理解正确,则需要在读取第一个块后触发另一个更新(作业提交间隔似乎设置为1)。这个查询也可以在单独的tasklet步骤中被隔离。一个不那么优雅的解决方案可以在处理器上实现一个条件,或者创建一个单独的处理器来做到这一点(但是您将不得不担心在重新启动的情况下管理该值)。 – guilhermerama

+0

在一个单独的tasklet中执行它听起来像一个很好的方法,事情是我需要使用阅读器查询的结果。因为我认为只执行更新查询的第二个处理器会更好。你能建议我如何为一个阅读器定义多个处理器及其执行顺序?非常感谢! –

+0

如果您选择CompositeItemProcessor方法,则必须执行if语句才能返回null,如果它不是第一次读取的话。因此,您将对所有数据库行进行不必要的条件验证。 – guilhermerama

回答

0

您可以链的处理器与CompositeItemProcessor

<bean class="org.springframework.batch.item.support.CompositeItemProcessor"> 
    <property name="delegates"> 
     <list> 
      <bean class="xx.xx.xx.UpdateDatabaseProcessor"></bean> 
      <bean class="xx.xx.xx.CurrentProcessor"></bean> 
     </list> 
    </property> 
</bean> 

他们将在其声明的顺序执行。

相关问题