有关步骤之间数据的Spring批处理最佳实践[关闭]

我们有一个旧的代码库,我认为通过选择一个好的批处理框架可以大大改进 .

我已经开始尝试使用Spring批处理并决定(在阅读了文档,有关它的多本书和论坛之后)了解它的最佳方法是实际使用它,所以我将一些现有的应用程序重新开发为Spring批量 .

这是我重新开发的简单应用程序:

  • 从表中读取行并将行解析为POJO

  • 如果满足给定条件,则忽略列表中的项目

  • 从解析列表中写入文件

  • 将文件上传到FTP

  • 如果FTP上载成功,则将已解析列表的元素标记为在db中处理

现在,我所做的是我创建了一个包含3个步骤的工作:

Step1是:读取POJO的行(读者,在这种情况下基于jdbc),排除项目(处理器),写入文件(writer) . 简单 . :)

第二步:将tasklet上传到FTP

Step3:现在,这就是我遇到麻烦的地方 . 我需要重用Step1中的POJO列表 .

我的理解是我有两种选择:

1) 使用StepExecutionContext,在那里保存List和ExecutionContextPromotionListener实现,以在Step1和Step2以及Step2和Step3之间传递列表 .

要么

2) 我使用相同的阅读器和处理器,这次使用不同的编写器 .

我真的不喜欢这两种方法

1)看起来很乱,我在多个地方读过,在这种情况下放置更大的东西不是一个好习惯(我的列表会容纳5-10000个对象)

2)似乎是浪费资源,又是一种不好的做法 . 在这种情况下,我可以逃脱它,但在更复杂的阅读器/处理器的情况下,这将是一个非常糟糕的重复工作 .

做我想做的最好的方法是什么?我在这里正确使用Spring Batch吗?

回答(2)

2 years ago

这就是我如何构建工作步骤 .

  • 读:DB写:File1

  • 读:File1进程:SkipFilter写:File2

  • 使用System Command Tasklet的FTP

  • 读取:File1或File2写入:DB

我添加了一个步骤来防止数据库更改,同时执行下游步骤 .

2 years ago

我一直在阅读“Spring Batch Essientials”一书,他们有想法使用“holder beans”来保存数据 . 注入bean以设置并获取数据 .