虽然我没有itemReader和itemWriter的用法,但对我来说是春季批次?

时间:2012-01-23 15:24:55

标签: java spring batch-processing spring-batch

春季新手:我有一系列批次

  • 从某些sql表中读取所有新记录(自上次执行以来)
  • 所有新记录上传至hadoop
  • 所有数据(旧的和新的)上运行一系列map-reduce(pig)作业
  • 将输出全部下载到本地并在所有输出上运行其他一些本地处理

重点是,我没有任何明显的"项目" - 我不想与我的数据中的特定文本行相关,我将它作为一个大块工作,并且不需要任何提交间隔等等......

然而,我确实希望保持所有这些步骤松散耦合 - 就像在步骤a + b + c可能会成功几天并累积处理过的东西而步骤d一直失败,然后当它最终成功时它会读取并且处理它之前步骤的所有输出。

SO:是我的"项目"一个虚构的"工作项目"这将表示整个新数据?我自己维护一系列队列并在它们之间传递这些虚构的工作项目吗?

谢谢!

2 个答案:

答案 0 :(得分:5)

人们总是认为弹簧批次的唯一用途实际上仅用于块处理。这是一个巨大的功能,但忽略的是处理和作业控制的可见性。

给5个人同样的任务,没有弹簧批,他们将以自己的方式实现流量控制和可见性。为5个人提供​​相同的任务和弹出批处理,您最终可能会以不同方式完成自定义tasklet,但是访问作业元数据以及启动和停止作业将保持一致。从我的角度来看,它是一个很好的工作管理工具。如果你已经编写了你的​​工作,你可以将它们实现为自定义tasklet,如果你不想重写它们以符合'item'范例。你仍会看到好处。

答案 1 :(得分:2)

我没有看到问题。你的场景看起来像是Spring Batch的经典应用程序。

  
      
  • 从某些sql表中读取所有新记录(自上次执行以来)
  •   

此处,项目是记录

  
      
  • 将所有新记录上传到hadoop
  •   

同样在这里

  
      
  • 在所有数据(旧的和新的)上运行一系列map-reduce(pig)作业
  •   

听起来像StepListener or ChunkListener

  
      
  • 将所有输出下载到本地并在所有输出上运行一些其他本地处理
  •   

这是下一步。


我看到的唯一问题是你的记录没有域对象。但即使这样,你仍然可以使用地图或数组,同时仍然使用ItemReaders和ItemWriters。