如何在没有initializingBean的情况下执行ItemReaderAdapter

时间:2012-11-23 14:47:29

标签: java spring spring-batch

在我的工作的最后一步,我会更容易调用现有的DAO来查询并返回一个复杂的对象图,我需要将ItemWriter作为XML持久化。我使用带有注释的XStream。

我看到ItemReaderAdapter的每个例子都实现了initializingBean来初始化我需要迭代的对象集合(基本上,在数据库上进行查询)。

如果在调用afterPropertiesSet()时(在作业开始时)我的数据将在数据库中,这将非常有用,但我必须读取的数据将保留在当前作业的步骤中。在这种情况下,我如何使用ItemReaderAdapter?

要点:

步骤1:读取xml并在DB(trxA)中写入对象

步骤2:读取flatFile并将对象写入DB(trxB)

第3步:trxA上的业务逻辑

第4步:trxB上的业务逻辑

步骤5 :(这是一个;-))调用将返回trxA和trxB的unifiedObject的DAO。

基本上,我需要知道:有没有办法可以告诉我的适配器在步骤开始时而不是工作开始时进行初始化?

此致

编辑:要清楚,这是一本书中的例子

public class ProductServiceAdapter implements InitializingBean {
  private ProductService productService;
  private List<Product> products;
public void afterPropertiesSet() throws Exception {
  this.products = productService.getProducts();
}
public Product nextProduct() {
  if (products.size()>0) {
    return products.remove(0);
  } else {
    return null;
  }
}

DAO访问是在afterPropertieSet()中完成的,所以在我的情况下它不起作用。

1 个答案:

答案 0 :(得分:2)

如果你想在步骤开始时做'东西',请使用它并实现beforeStep()

StepExecutionListener

然后你就像这样配置它

<step id="concreteStep">
<tasklet>
    <chunk reader="itemReader" writer="itemWriter" commit-interval="5"/>
    <listeners>
        <listener class="com.Listener"/>
    <listeners>
</tasklet></step>