我们有一个旧的代码库,我认为通过选择一个好的批处理框架可以大大改进 .
我已经开始尝试使用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 回答
这就是我如何构建工作步骤 .
读:DB写:File1
读:File1进程:SkipFilter写:File2
使用System Command Tasklet的FTP
读取:File1或File2写入:DB
我添加了一个步骤来防止数据库更改,同时执行下游步骤 .
我一直在阅读“Spring Batch Essientials”一书,他们有想法使用“holder beans”来保存数据 . 注入bean以设置并获取数据 .