当前位置: 首页 > 知识库问答 >
问题:

spring批处理:不带ItemWriter的Tasklet

微生昌胤
2023-03-14

我在没有ItemWriter的情况下定义了我的tasklet,如下所示:

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

我得到了这个错误:

配置问题:

你有什么想法吗?谢谢


共有2个答案

孟健
2023-03-14

我们可以在没有writer的情况下定义块(只是一个读处理器),我成功地做到了这一点。似乎要通过包含区块的writer步骤,必须继承抽象步骤父级,如下所示:

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

问题解决了,谢谢!

明越
2023-03-14

好吧,在一个块中,阅读器和写入器是强制性的!但是,ItemProcess是可选的。

这是官方文件

5.1.1。配置步骤

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

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

事务管理器-Spring的PlatformTransactionManager,将用于在处理期间开始和提交事务。

job repository—JobRepository,用于在处理期间(提交之前)定期存储StepExecution和ExecutionContext。对于内嵌(在a中定义的一个)而言,它是元素上的一个属性;对于独立步骤,它定义为的属性。

提交间隔—提交事务之前将处理的项目数。

应该注意的是,作业存储库默认为“jobRepository”,事务管理器默认为“transactionManger”。此外,ItemProcessor是可选的,不是必需的,因为该项可以直接从读卡器传递给写卡器。

 类似资料:
  • 我有一个假问题。为了解释我的用例,我有不同类型的DAO;比如说啤酒。。。等等,我想用一个通用的ItemWriter来处理所有的问题。我创建了一个,在这里我定义了; 作家班是这样的; 到目前为止一切都还好。事情变得复杂的地方是,我为每个存储库定义了单独的配置类,其中定义了存储库特定的项。例如,为用户插入数据库的步骤。 当我用IJ编写这段代码时,我抱怨

  • 我从某个时候起就被这个问题困扰着。 我使用的是spring batch 3.0.7 问题是在ItemWriter中的一个记录中出现org.springframework.dao.DataIntegrityViolationExcue的情况下,组块(组块大小=10)中的其余记录也不会插入到数据库中,即使在提供了skipPolicy之后(对于所有异常返回true)。 我的理解是,如果在提交整个大块时出

  • 我正在编写Spring批的Spring Boot应用程序,其中ItemReader从Oracle数据库读取数据并将数据写入postgres sql,但我得到了以下错误 我不想创建spring批处理元数据表,我的应用程序不需要监视作业,请就此向我提出建议。提前谢谢!!

  • 我有以下工作要处理在一定的时间间隔或特别的基础上。 作业中的步骤如下: 我也想要用户界面,在那里我可以触发一个特别的基础上的工作,而且我应该能够提供参数从用户界面。 我想用Spring batch来完成这个任务,但它更多的是用于读->处理->写之类的工作。这里,在第一步中,我正在生成由第二步读取的数据。我不确定我是否还可以使用Spring batch来实现这个,或者有更好的方法来实现这个。

  • 我有一个简单的Spring批处理作业,包含几个步骤,最后一步是编写报表,所以我有ItemReader、ItemProcessor和ItemWriter。ItemWriter按块编写取决于步骤中定义的块数,但我需要等到获得所有项后再编写最终报告。我怎么能那样做?

  • 我是spring批处理的新手,所以也许我错了,但我不明白为什么itemWriter中的write方法需要数据列表: 如果我理解这个过程,首先是itemReader,它读取项目列表。在第一次迭代中,读取第一项,依此类推...下一步是itemProcessor,它从ItemReader获取数据。然后有一些处理和itemProcessor返回新的类,我们希望保存在某个地方。最后一步是itemWriter