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

实现ItemProcessListener链的ItemProcers

樊熠彤
2023-03-14

我用的是Spring batch。我有两个用于处理逻辑的项目过程

我已经为ItemReader和ItemWriter配置了侦听器。

我使用过Spring Batch CompositeItemProcessor(org.springframework.Batch.item.support.CompositeItemProcessor)。

我的工作配置如下:-

<job id="SoDJob" xmlns="http://www.springframework.org/schema/batch">
        <step id="step1">
            <tasklet>
                <chunk reader="itemReader"  processor="SoDConflictProcessor" writer="SoDConflictExcelWriter"
                    commit-interval="1" />                  
            <listeners>
                    <listener ref="sodJobListener" />
                    <listener ref="SoDItemReaderListener" />
                    <listener ref="SoDItemWriterListener" />
            </listeners>                    
            </tasklet>
        </step>
    </job>

我的处理器配置为:-

<bean id="SoDConflictProcessor"
class="org.springframework.batch.item.support.CompositeItemProcessor">
<property name="delegates">
<list>
<ref bean="SoDDataProcessor" />
<ref bean="SoDLogicProcessor" />
</list>
</property>
</bean>

如何为ItemProcessor(SoDDataProcessor和SoDLogicProcessor)编写单独的ItemProcessListener。

仅供参考:

1)SoDData处理器-实现<代码>项目处理器

2)SoDLogicProccher-实现<代码>项目处理器

希望这澄清了我的问题。

共有1个答案

姜楷
2023-03-14

有一个CompositeItemProcessListener,但这不符合您的要求,因为——我认为——您的要求是在SoDDataProcessor处理一个项目时调用SoDDataProcessor,并在从上一步转换的项目通过时调用SoDLogicProcessorListenerSoDLogicProcessor
这是不可能的,原因有二:

  1. ItemProcessorListener是围绕您的CompositeItemProcessor调用的,而不是围绕其委托的ItemProcessors

你必须以另一种方式解决,这取决于你的需求;我将为您的问题提供一个想法,但您也可以重新考虑您的设计,以获得相同的结果

我的想法是:
将中间转换的数据存储在StepExecutionContext中,编写自己的ItemProcessorListener,将每个中间结果委托给SoDDataProcessorListenerSoDLogicProcessorListener和其他人(如果您(将)有更多数据并将数据发送给正确的侦听器);通过这种方式,您还可以编写特定的类,将侦听器分开。

希望能有所帮助。

 类似资料:
  • 本文向大家介绍C++实现的链表类实例,包括了C++实现的链表类实例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了C++实现的链表类。分享给大家供大家参考。具体如下: 希望本文所述对大家的C++程序设计有所帮助。

  • C语言面向对象编程(五):单链表实现 前面我们介绍了如何在 C 语言中引入面向对象语言的一些特性来进行面向对象编程,从本篇开始,我们使用前面提到的技巧,陆续实现几个例子,最后呢,会提供一个基本的 http server 实现(使用 libevent )。在这篇文章里,我们实现一个通用的数据结构:单链表。 这里实现的单链表,可以存储任意数据类型,支持增、删、改、查找、插入等基本操作。(本文提供的是完

  • 我得到了这些结构声明,以便实现使用循环链表的队列集合。 我试图创建一个函数,它将以指定的值排队(将其追加到队列的后面),我需要考虑队列为空和队列有一个或多个元素的两种情况。这是我到目前为止的代码: 这段代码给了我一个运行时错误,所以我不确定出了什么问题。在代码中,我假设队列-

  • 这在传统的Java bean(set/get方法)中很简单,但是JavaFX属性包含了可观察的概念和绑定,而且似乎很快就变得复杂起来。 我尝试过绑定,但这使得目标属性不可设置,也尝试过双向绑定,但我只能绑定“相等”,而不能绑定表达式。 我已经开始将实现为,但是处理监听器等似乎需要大量工作。 我将如何用JavaFX的方式来实现这一点?这是我试过的 我认为这是可行的,但我必须定义一个“虚拟”属性,而且

  • 在试图理解如何在C#中实现单个列表时,我遇到了下面的链接: 创建一个非常简单的链表。 然而,由于我是C#的新手,我被上面讨论的第一部分中列出的语法弄糊涂了。正在声明一个名为节点的类,并且在声明为“公共节点下一个”的类中还有另一个语句。这个语句称为构造函数吗?请帮忙。

  • 本文向大家介绍C语言单链表的实现,包括了C语言单链表的实现的使用技巧和注意事项,需要的朋友参考一下 单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素。 链表结构: SList.h SList.cpp Test.cpp 以上内容是小编给大家介绍的C语言单链表的实现代码,希望对大家有所帮助!