Spring batch (一)

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同一水平线上。

你可能感兴趣的:(spring,batch)