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

Spring批处理链式复合项目处理器和编写器

鲁涵意
2023-03-14

我必须像这样配置批处理作业流。

XML文件阅读器-

我的定制处理器是这样的

public class MyCompositeProcessor implements ItemProcessor<MySource, MyCompositeResult> {

@Override
    public MyCompositeResult process(MySource item) throws Exception {
       MyResult1 result1 = myProcessor1.process(item);
       MyResult2 result2 = myProcessor2.process(result1);
        return MyCompositeResult(result1, result2);
    }
}


public class MyCompositeWriter implements ItemWriter<MyCompositeResult> {
    
    @Override
    public void write(List<? extends MyCompositeResult> items) throws Exception {
        myWriter1.write(item.getResult1());
        myWriter2.write(item.getResult2());
    }
}

这是一个好的方法吗?我看到了一些CompositeProcess、CompositeWriter的例子,但没有一个适合我的案例。

提前谢谢。

共有1个答案

华佐
2023-03-14

如果我理解正确,您的要求如下:

item reader → item processor 1  → item processor 2
                   ↓                   ↓
              item writer 1       item writer 2

复合项处理器/写入器路由在您的情况下不起作用,因为它类似于:

item reader → composite item processor    →   composite item writer
              (processor 1 → processor 2)     (writer 1 → writer 2)

这不是你想要的。您的需求是特定的,您需要一个定制的ChunkProcessor实现,特别是一个复合块处理器:

item reader → chunk processor 1  → chunk processor 2
              (item processor 1)   (item processor 2)
              (     ↓          )   (     ↓          )
              (item writer 1   )   (item writer 2   )
 类似资料:
  • 关于文章Spring批处理CompositeItemWriter如何管理委托编写器的事务?,对于复合项编写器事务管理,难道不应该将数据源包装在如下所示的事务管理器中吗?没有下面的bean定义,事务管理就无法与Oracle和Hikari CP一起工作。不确定帖子中提供的示例是如何工作的。请澄清

  • 我目前正在编写一个Spring批处理,其中我正在读取一个数据块,并对其进行处理,然后我希望将此数据传递给两个Writer。一个writer将简单地更新数据库,而第二个writer将写入csv文件。 我计划编写自己的自定义编写器,并在customItemWriter中注入这两个ItemWriter,并在customItemWriter的write方法中调用这两个ItemWrite的write方法。这

  • 在我的Spring boot和Spring batch应用程序中,我有这样一个步骤: 我的作家是一个空的,如下所示: 现在,在我的处理器中,我有: 问题:由于所有对象都传递给处理器,我可以在处理器本身中处理它们,而不是使用任何转换等,因为我的目的通过使用处理器来解决,这是一个好的做法吗?或者我必须使用作家/自定义作家来完成工作?

  • 我有一个批处理步骤 读取器和处理器流程如何工作?读取器是读取块并等待处理器处理它,还是一次读取所有块。

  • 关于skip,我有一个非常基本的问题。我正在使用spring示例提供的spring batch simple cli项目,并试图理解跳过行为。它有一个非常基本的示例读取器,可以读取字符串数组(我将其修改为从Hellowworld 1到Hellowworld 10的10个字符串列表中读取),还有一个基本的编写器,可以登录到控制台。writer抛出java。每写一次都有例外。我在作业配置中增加了4个跳

  • 事务在Spring批处理中未回滚。我有意抛出异常来测试事务回滚。即使从项目编写器引发异常,数据库事务也在提交。下面是写入器中保存到DB中的方法。对象是注入到此类中的 jpa 存储库 我尝试用@Transactional(传播=Propagation.REQUIRES_NEW, rollbackFor=Exception.class)标记上述方法的事务,但它仍然在提交事务。我肯定我错过了一些东西。任