【问题标题】:spring batch : Tasklet without ItemWriter春季批处理:没有ItemWriter的Tasklet
【发布时间】:2013-06-19 13:01:38
【问题描述】:

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

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

我得到了这个错误:

配置问题:&lt;b:chunk/&gt; 元素既没有 'writer' 属性也没有 &lt;writer/&gt; 元素。

你有什么想法吗? 谢谢

【问题讨论】:

    标签: java spring spring-batch


    【解决方案1】:

    好吧,总的来说,一个读者和一个作家是强制性的!但是,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 是可选的,不是必需的,因为项目可以直接从读取器传递给写入器。

    【讨论】:

      【解决方案2】:

      我们可以在没有写入器的情况下定义一个块(只是一个读取器 + 处理器),我设法做到了。似乎为了通过包含块的编写器步骤必须继承抽象步骤父级,如下所示:

          <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>
      

      问题已解决,谢谢!

      【讨论】:

      • 哇,这合法吗? :D
      猜你喜欢
      • 2016-11-12
      • 2014-12-15
      • 2018-05-27
      • 2015-05-13
      • 2017-06-25
      • 1970-01-01
      • 2017-10-06
      • 2019-04-05
      • 2021-06-21
      相关资源
      最近更新 更多