【问题标题】:combine CompositeItemProcessor and CompositeItemWriter in spring batch在春季批处理中结合 CompositeItemProcessor 和 CompositeItemWriter
【发布时间】:2020-03-21 10:22:46
【问题描述】:

我有一个场景,遵循以下步骤:
1。读者将从表 A 中得到一个列表 A。
2。处理器处理列表 A 以返回对象 A 和 MimeMessage。
3。作者将对象 A 写入表 B 并使用 MimeMessage 发送邮件。

我可以在上面的场景中使用 CompositeItemProcessor 和 CompositeItemWriter 吗?如果是,如何在 Step 配置中设置输出对象以及如何定义发送邮件的 ItemWriter 将采用 MimeMessage,而插入数据库的 ItemWriter 将采用对象 A。

我的问题有更好的解决方案吗?

【问题讨论】:

    标签: spring spring-batch


    【解决方案1】:

    如何定义哪个 ItemWriter 用于发送邮件将采用 MimeMessage 或 ItemWriter 用于插入数据库将采用对象 A。

    您可以使用ClassifierCompositeItemWriter。此复合编写器使用 Classifier 对项目(在您的情况下为 Type A 或 MimeMessage)进行分类,并为每种类型调用一个委托编写器。

    【讨论】:

    • 很抱歉,但我已经编辑了我的问题,即列表 A 中的项目应该在两种情况下都使用插入数据库和发送邮件。但是,ClassifierCompositeItemWriter 只是返回插入数据库或发送邮件
    • 以及步骤配置中 chunk() 的格式如何。因为对于插入案例,它可能是 chunk() 但它是 chunk() 用于发送邮件。我该如何组合它们?
    • 好吧,那不一样。当你说The processor processes list A to return object A and MimeMessage. :处理器不能返回两个对象。您可以让处理器创建一个 MimeMessage 并将其设置在对象 A 上。这是您的选择吗?这样,处理器使用 MimeMessage 丰富每个项目,然后复合编写器将项目写入数据库并通过电子邮件发送它们。如果这是您正在寻找的内容,我可以提供代码示例。否则,请举例说明您要达到的目标。
    • 是的,这就是我要找的。请给我一些例子好吗?
    • 我看到了你的代码,实现是正确的,这是我的建议。我很高兴它对你有用。现在关于性能,我不知道哪个部分是原因。可能是mailSender.send,因为此呼叫被阻塞并且可能需要时间,但我会让您通过分析您的工作来确认这一点。如果客户不相关(我猜应该是这种情况),请尝试使用多线程或分区步骤来提高性能(参见本章:docs.spring.io/spring-batch/docs/4.2.x/reference/html/…)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-10-06
    • 2014-12-15
    • 2018-05-27
    • 2015-05-13
    • 2017-06-25
    • 1970-01-01
    • 2021-06-21
    相关资源
    最近更新 更多