Spring batch 2.0中的新功能:
The Spring Batch 2.0 release has six major themes:
Spring batch 2.0 版本 有6个主要的功能:
• Java 5 支持泛型
• Non Sequential Step Execution 无序的步骤执行
• Chunk oriented processing 基于大数据的处理
• Meta Data enhancements 大数据的提高
• Scalability 可扩展性
• Configuration 配置特性
2.1 JAVA5
1.x版本的spring batch是基于java1.4,这阻止了许多使用JAVA5中中新功能(如泛型,参数化类型)的框架扩展。整个框架已经更新到能充分利用这些功能。所以 JAVA1.4已经不再支持了。开发人员已经更新spring batch 大多数接口能够支持泛型。一下这个例子,1.1版本中的ItemReader接口源码 :
public interface ItemReader { Object read() throws Exception; void mark() throws MarkFailedException; void reset() throws ResetFailedException; }正如你所见,read方法返回一个Object对象。
2.0版本ItemReader代码如下:
public interface ItemReader<T> { T read() throws Exception, UnexpectedInputException, ParseException; }
正如你所见 ItemReader 现在支持泛型 T 正是从read方法的返回类型。你也可以发现mark reset方法已经删除,这是因为step processing策略的改变,在下面将会讨论到。很多其他接口也进行了类似的更新。
2.2 Chunk Oriented Processing
很明显,spring batch 提供的默认处理策略是 基于条目的处理。item-oriented 。
在基于条目的处理中,ItemReader 返回一个object 即 item ,然后交给ItemWriter,当items的数量等于commit interval值时,定期提交。例如如果commit interval 值为5 ,那么ItemReader 和ItermWriter每五次被调用一次。下面的代码为简化后的小例子。
for(int i=0;i<commitInterval;i++){ Object item=itermReader.read(); itermWriter.write(item); }
ItemReader 和 ItemWriter接口适应这种趋势:
public interface ItemReader { Object read() throws Exception; void mark() throws MarkFailedException; void reset() throws ResetFailedException; } public interface ItemWriter { void write(Object item) throws Exception; void flush() throws FlushFailedException; void clear() throws ClearFailedException; }
因为scope 处理一个条目,支持回滚场景需要额外的方法,这就是mark reset flush clear方法的作用。
如果成功读和写2个item之后,第三个item写时发生了错误,那么事务将会回滚。
在这种案例中,writer调用clear方法,表明他需要清除缓存,ItemReader 将会调用reset,表明它应该返回上一个位置,即当mark被调用时的位置。
New
这种方法不仅允许更多简单处理和可扩展方法。也让ItemReader 和 ItemWriter接口更简洁。不再有mark reset flush clear 方法,这让readers和writers的创造对于开发者来说更为直接。
2.2.1 ItemProcessor
很明显,steps只有两个依赖,即ItemReader与ItemWriter
在1.x版本中steps有一个额外层在reader和writer 与 step中。另外,itemWriter需要作为一个ItemStream注册在step中。由于这个原因,ItemTransformer 被重命名为ItemProcessor被移到ItermReader与ItemWriter同一水平线上。