spring batch:没有ItemWriter的Tasklet

时间:2013-06-19 13:01:39

标签: java spring spring-batch

我在没有ItemWriter的情况下定义了我的tasklet:

<b:tasklet>
    <b:chunk reader="baseReader" processor="baseProcessor"  commit-interval="100" />
</b:tasklet>

我收到了这个错误:

配置问题:<b:chunk/>元素既没有'writer'属性也没有<writer/>元素。

你知道吗? 感谢

2 个答案:

答案 0 :(得分:6)

嗯,在一大块,一个读者和一个作家是强制性的!但是,ItemProcessor是可选的。

这是来自官方文件:

  

5.1.1。配置步骤

     

尽管Step的必需依赖项列表相对较短,但它是一个极其复杂的类,可能包含许多协作者。为了简化配置,可以使用Spring Batch命名空间:

<job id="sampleJob" job-repository="jobRepository">
<step id="step1">
    <tasklet transaction-manager="transactionManager">
        <chunk reader="itemReader" writer="itemWriter" commit-interval="10"/>
    </tasklet>
</step>

  

上面的配置代表了创建面向项目的步骤所需的唯一依赖项:

     

reader - 提供处理项目的ItemReader。

     

writer - 处理ItemReader提供的项目的ItemWriter。

     

transaction-manager - 将用于开始和使用的Spring的PlatformTransactionManager   在处理过程中提交事务。

     

job-repository - 将在处理期间(就在提交之前)定期存储StepExecution和ExecutionContext的JobRepository。对于内联(在a中定义的内容),它是元素的属性;对于独立步骤,它被定义为。

的属性      

commit-interval - 提交事务之前将处理的项目数。

     

应该注意的是,job-repository默认为“jobRepository”,而transaction-manager默认为“transactionManger”。此外,ItemProcessor是可选的,不是必需的,因为该项可以直接从阅读器传递给编写者。

答案 1 :(得分:4)

我们可以定义一个没有编写器的块(只是一个读取器+处理器),我设法这样做了。似乎为了传递包含块的编写器步骤必须继承抽象步骤父类,如下所示:

    <b:step id="task" parent="Task">
        <b:tasklet>
            <b:chunk reader="baseReader" processor="baseProcessor" commit- interval="100" />
        </b:tasklet>
    </b:step>

    <b:job id="batch" parent="Batch">
        <b:step id="etape" parent="task" />
    </b:job>

问题解决了,谢谢!