首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spring Batch :一个阅读器,复合处理器(两个具有不同实体的类)和两个kafkaItemWriter

Spring Batch :一个阅读器,复合处理器(两个具有不同实体的类)和两个kafkaItemWriter
EN

Stack Overflow用户
提问于 2020-12-14 17:00:30
回答 2查看 268关注 0票数 0

ItemReader正在从DB2读取数据,并提供了java对象ClaimDto。现在ClaimProcessor接受ClaimDto的对象,并返回由claimRecord1claimRecord2组成的CompositeClaimRecord对象,该对象将被发送到两个不同的Kafka主题。如何将claimRecord1claimRecord2分别写入topic1和topic2。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-12-14 18:11:39

只需编写一个自定义的ItemWriter就可以做到这一点。

代码语言:javascript
复制
public class YourItemWriter implements ItemWriter<CompositeClaimRecord>` {

  private final ItemWriter<Record1> writer1;
  private final ItemWriter<Record2> writer2;

  public YourItemWriter(ItemWriter<Record1> writer1, ItemWriter<Record2> writer2>) {
    this.writer1=writer1;
    this.writer2=writer2;
}

  public void write(List<CompositeClaimRecord> items) throws Exception {

    for (CompositeClaimRecord record : items) {
       writer1.write(Collections.singletonList(record.claimRecord1));
       writer2.write(Collections.singletonList(record.claimRecord2));

    }
  }
}

或者,不是一次写入一条记录,而是将单个列表转换为2个列表并传递。但在这种情况下,错误处理可能有点困难。\

代码语言:javascript
复制
public class YourItemWriter implements ItemWriter<CompositeClaimRecord>` {

  private final ItemWriter<Record1> writer1;
  private final ItemWriter<Record2> writer2;

  public YourItemWriter(ItemWriter<Record1> writer1, ItemWriter<Record2> writer2>) {
    this.writer1=writer1;
    this.writer2=writer2;
}

  public void write(List<CompositeClaimRecord> items) throws Exception {

    List<ClaimRecord1> record1List = items.stream().map(it -> it.claimRecord1).collect(Collectors.toList());
    List<ClaimRecord2> record2List = items.stream().map(it -> it.claimRecord2).collect(Collectors.toList());

    writer1.write(record1List);
    writer2.write(record2List);


  }
}
票数 2
EN

Stack Overflow用户

发布于 2020-12-14 17:25:04

您可以使用具有两个KafkaItemWriterClassifierCompositeItemWriter作为委派(每个主题一个)。

Classifier将根据项目的类型(claimRecord1claimRecord2)对项目进行分类,并将它们路由到相应的kafka项目写入器(topic1topic2)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65286139

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档