我在没有 ItemWriter 的情况下定义了我的 tasklet,如下所示:
<b:tasklet>
<b:chunk reader="baseReader" processor="baseProcessor" commit-interval="100" />
</b:tasklet>
我得到了这个错误:
配置问题:该<b:chunk/>
元素既没有“writer”属性也没有<writer/>
元素。
你有什么主意吗 ?谢谢
我在没有 ItemWriter 的情况下定义了我的 tasklet,如下所示:
<b:tasklet>
<b:chunk reader="baseReader" processor="baseProcessor" commit-interval="100" />
</b:tasklet>
我得到了这个错误:
配置问题:该<b:chunk/>
元素既没有“writer”属性也没有<writer/>
元素。
你有什么主意吗 ?谢谢
好吧,总的来说,一个读者和一个作家是强制性的!但是,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 - JobRepository 将用于在处理期间(就在提交之前)定期存储 StepExecution 和 ExecutionContext。对于内联(在 a 中定义的),它是元素上的一个属性;对于独立步骤,它被定义为 .
commit-interval - 在提交事务之前将处理的项目数。
需要注意的是,job-repository 默认为“jobRepository”,transaction-manager 默认为“transactionManger”。此外,ItemProcessor 是可选的,不是必需的,因为项目可以直接从读取器传递给写入器。
我们可以在没有写入器的情况下定义一个块(只是一个读取器+处理器),我设法做到了。似乎为了通过包含块的编写器步骤必须继承抽象步骤父级,如下所示:
<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>
问题已解决,谢谢!