2.3 配置强化
在2.0之前,只有一种方式把批处理任务配置成一个spring配置项,到了2.0版本,批处理任务配置有了新的namespace。例如,在1.1版本中需要像下面这样配置任务:
- <bean id="footballJob"
- class="org.springframework.batch.core.job.SimpleJob">
- <property name="steps">
- <list>
- <!-- Step bean details ommitted for clarity -->
- <bean id="playerload"/>
- <bean id="gameLoad"/>
- <bean id="playerSummarization"/>
- </list>
- </property>
- <property name="jobRepository" ref="jobRepository" />
- </bean>
到了2.0版本,相当于这样:
- <job id="footballJob">
- <!-- Step bean details ommitted for clarity -->
- <step id="playerload" next="gameLoad"/>
- <step id="gameLoad" next="playerSummarization"/>
- <step id="playerSummarization"/>
- </job>
2.4 元数据访问的改进
JobRepository接口包含了针对Job元数据的基本CRUD操作。然而,对元数据的查询也是必需的,JobExplorer和JobOperator接口被创建出来用于满足这个需求:
更多关于元数据新特性可以在"Section 4.5 元数据的高级使用"中查到。
值得注意的是,现在可以通过数据库来停止任务,从jvm中移除已经被启动的job所对应的JobExecution句柄
2.5 非顺序化的执行步骤
2.0改善了step的配置方式。之前step只能是顺序化的:
现在可以这样配置:
新的“条件流程”使用新的namesapce能够很容易的配置:
- <job id="job">
- <step id="stepA">
- <next on="FAILED" to="stepB" />
- <next on="*" to="stepC" />
- </step>
- <step id="stepB" next="stepC" />
- <step id="stepC" />
- </job>
2.6 可扩展性
Spring Batch 1.x只在单个vm中运行,可能是多个线程并发,但是现在许多功能都是支持多进程下的并发执行。许多依赖于Spring Batch的项目成功实现可扩展性方案能确保处理准确的运行序列。在2.0中这些功能都明确的展示出来,有两个解决方案:远程分块和分区。
2.6.1 远程分块
远程分块是一个把step进行技术分割的工作,不需要对数据的结构有明确的了解。任何输入源能够使用单进程读取并在动态分割后作为"块"发送给远程的工作进程。远程进程实现了监听者模式,反馈请求、处理数据最终将处理结果异步返回。请求和返回之间的传输会被确保在发送者和单个消费者之间,这些特性在JMS的实现中可以找到。但是Spring Batch在Spring Integration顶部实现了远程分块的特性,因此实际上是实现了一个消息中间件。更多的细节可以参考”section 7.3 远程分块“
2.6.2 分区
分区是另一个可选方案,它需要对数据的结构有一定的了解,如主键的范围、待处理的文件的名字等。这种模式的优点在于分区中每一个元素的处理器都能够像一个普通Spring Batch任务的单步一样运行,也不必去实现任何特殊的或是新的模式,来让他们能够更容易配置与测试。分区理论上比远程分块更有扩展性,因为分区并不存在从一个地方读取所有输入数据并进行序列化的瓶颈。
在Spring Batch 2.0中有两个接口支持分区:PartitionHandler和StepExecutionSplitter。PartitionHandler知道执行结构-它需要将请求发送到远程步骤并使用任何可以使用的网格或是远程技术收集计算结果。PartitionHandler是一个SPI,和Spring Batch通过TaskExecutor为本地执行提供了一个外部实现方式。在需要进行有大量IO操作的并发处理时,这个功能是很有用的。因为在大IO场景下远程执行只是复杂的部署而不能带来多大的性能提升。Spring Batch可以公平的使用其他的执行结构(如IBM,Oracle,Terracotta,Appistry这样的网格提供商)。更多细节可以参考Section 7.4 ”分区“
http://blog.youkuaiyun.com/shorn/article/details/7861951