gpt4 book ai didi

java - 在 Spring Batch 步骤之间传递输出

转载 作者:行者123 更新时间:2023-12-02 05:06:49 25 4
gpt4 key购买 nike

我有两个业务逻辑步骤:

  1. 从外部资源解析中下载xml并将其转换为对象
  2. 将输出(对象列表)调度到外部队列

    @Bean
    public Job job() throws Exception {
    return this.jobs.get("job").start(getXmlViaHttpStep()).next(pushMessageToQueue()).build();
    }

所以我的第一步是 Tasklet,它下载(通过 http)文件并将其转换为对象。

我的第二个任务是另一个 Tasklet,它假设分派(dispatch)上一步的输出。

现在如何将输出列表从步骤 1 传递到步骤 2(作为其输入)?

我可以将其保存在临时文件中,但是没有其他最佳实践场景吗?

最佳答案

我可以看到至少有两个可行的选择。

选项 1:一步设置作业您可以将您的作业设置为包含一个步骤,其中读取器只需从您的 URL 读取输入,而写入器将发布到您的队列。

选项 2:通过中间存储将作业设置为两个步骤但是,您可能希望将作业分为两个步骤,以便能够在失败时重新运行步骤并简化调试等。在这种情况下,以下方法可能适合您:

  • 第 1 步:使用 FlatFileItemReader 或类似工具创建一个步骤,用于下载文件。然后,该步骤可以配置 FlatFileItemWriter 将内容移动到磁盘。
  • 第 2 步:打开上一步中 ItemWriter 生成的文件。一种替代方法是使用 org.springframework.batch.item.xml.StaxEventItemReader 和 Jaxb2Marshaller 一起进行处理(如 this blog 中所述)。配置输出步骤以使用例如将消息发布到队列org.springframework.batch.item.jms.JmsItemWriter。作者(一如既往)被分块,因此每次写入都可以发布多条消息。

就我个人而言,我可能会将整个事情设置为选项 2。我发现没有太多转换的简单步骤更容易遵循,也更容易测试,但这只是一个品味问题。

关于java - 在 Spring Batch 步骤之间传递输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27721249/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com