Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在spring批处理步骤之间传递输出_Java_Spring_Spring Batch - Fatal编程技术网

Java 在spring批处理步骤之间传递输出

Java 在spring批处理步骤之间传递输出,java,spring,spring-batch,Java,Spring,Spring Batch,我有两个业务逻辑步骤: 从外部资源解析下载xml并将其转换为对象 将输出(对象列表)分派到外部队列 @Bean public Job job() throws Exception { return this.jobs.get("job").start(getXmlViaHttpStep()).next(pushMessageToQueue()).build(); } 因此,我的第一步是Tasklet,它下载(通过http)文件并将其转换为对象 我的第二个任务是另一个Tasklet,它

我有两个业务逻辑步骤:

  • 从外部资源解析下载xml并将其转换为对象
  • 将输出(对象列表)分派到外部队列

    @Bean
    public Job job() throws Exception {
        return this.jobs.get("job").start(getXmlViaHttpStep()).next(pushMessageToQueue()).build();
    }
    
  • 因此,我的第一步是Tasklet,它下载(通过http)文件并将其转换为对象

    我的第二个任务是另一个Tasklet,它假定分派上一步的输出

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


    我可以将其保存在temp文件中,但是否还有其他最佳实践方案呢?

    我可以看到至少两种方案都是可行的

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

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

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

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

    这只是一个步骤。1.他是个读者,他是个作家。基于单个块的步骤。您需要单个消息还是每个对象一条消息?我需要从步骤1检索输出对象的列表,并将它们作为步骤2的输入。所以我可以迭代每个项目并将其发送到队列。这只是一个读写器的简单步骤。基于块的。您可以使用其中一个xml读取器,并且有几个消息传递(例如JMS)编写器可用于将消息写入队列。对我来说,从监视/回滚/等中将它们分成几个步骤不是更容易吗。。方面??您不在这个过程中使用Spring集成有什么原因吗?