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,它
@Bean
public Job job() throws Exception {
return this.jobs.get("job").start(getXmlViaHttpStep()).next(pushMessageToQueue()).build();
}
我可以将其保存在temp文件中,但是否还有其他最佳实践方案呢?我可以看到至少两种方案都是可行的 选项1:将作业设置为一个步骤 您可以将作业设置为包含一个步骤,在该步骤中,读取器只需从URL读取输入,而编写器将文章发送到您的队列 选项2:使用中间存储将作业设置为两个步骤 但是,您可能希望将作业分为两个步骤,以便在某个步骤失败时能够重新运行该步骤,并简化调试等。在该cas中,以下方法可能适合您:
- 步骤1:使用
或类似工具创建步骤以下载文件。然后,该步骤可以配置FlatFileItemReader
将内容移动到磁盘FlatFileItemWriter
- 步骤2:打开上一步中由
生成的文件。一种替代方法是使用ItemWriter
和org.springframework.batch.item.xml.statexEventItemReader
来处理处理(如中所述)。使用org.springframework.batch.item.jms.JmsItemWriter等配置输出步骤,将消息发布到队列中。writer(一如既往)是分块的,因此每次写入都可以发布多条消息Jaxb2Marshaller
就个人而言,我可能会把整个事情设置为选项2。我发现没有太多转换的简单步骤更容易遵循,也更容易测试,但这只是一个品味问题。这只是一个步骤。1.他是个读者,他是个作家。基于单个块的步骤。您需要单个消息还是每个对象一条消息?我需要从步骤1检索输出对象的列表,并将它们作为步骤2的输入。所以我可以迭代每个项目并将其发送到队列。这只是一个读写器的简单步骤。基于块的。您可以使用其中一个xml读取器,并且有几个消息传递(例如JMS)编写器可用于将消息写入队列。对我来说,从监视/回滚/等中将它们分成几个步骤不是更容易吗。。方面??您不在这个过程中使用Spring集成有什么原因吗?