spring-batch 集成
批作业运行
框架选用spring-batch作为支持应用系统批作业规划的组件。其优势在于对Spring-Framework的紧密结合,基于数据库表的批作业运行管理,支持批作业任务分片策略,集群策略,并行策略等。这些特性对后续基于其上的的批作业管理与监控功能的扩展性更强。
spring-batch官方文档: http://docs.spring.io/spring-batch/trunk/reference/html/index.html 对批作业运行态管理,框架没有对spring-batch做任何侵入性修改和外围的封装,仅从配置便捷性上将spring-batch的几个服务类以Bean的形式暴露出来:
批作业重启
框架对spring-batch的重启策略,结合应用系统实际场景总结基础上进行了再定义。并将逻辑封装到com.halo.core.batch.service.impl.batch. BatchJobLauncher
服务中。提供异步触发,Quartz触发两种批作业触发功能。在这两个功能中,已经隐含了批作业重启策略。
先判断当前是否已经有该批作业的运行实例。如果有,则执行下列判断:
a) 如果批作业实例状态为
{@link FAILED}
,{@link ABANDONED}
,并且restartable=true
,则尝试重启批作业实例。并计数。b) 如果批作业实例状态为
{@link COMPLETED}
,{@link STOPPED}
,并且声明了incrementer,则用相同的业务参数再创建一个批作业实例并运行。c) 如果批作业实例状态为
{@link COMPLETED}
,{@link STOPPED}
,但是未声明incrementer,则抛出异常。d) 如果批作业实例状态为
{@link UNKNOWN}
, 则抛出异常。e) 如果批作业实例为其他状态,则打印日志,直接返回。
批作业触发
spring-batch组件仅提供基于编译器代码方式的批作业任务触发api,但是在应用系统使用场景中,需要通过不同的渠道来触发一次批作业任务的执行。框架对spring-batch的job任务触发附加了三种方式:
基于Quartz的定时执行策略。在halo-batch组件中实现。以定时任务的形式启动一次批作业的执行。(详见“定时任务”)。批作业的定时触发的注册策略采用Spring配置注册的方式:示例配置如下:
基于DASC的消息触发执行策略。在batch-trigger组件中实现。框架向消息队列上注册一个dasc服务,任何发送到该队列的消息都会异步触发一次批作业任务的执行。
基于HTTP请求的出发执行策略。在batch-trigger组件中实现。框架对外暴露一个REST服务,任何调用该服务的请求会触发一次批作业任务的执行。触发机制提供“同步/异步”两种。接口描述如下:
Last updated