springbatch是spring提供的一个数据处理框架。企业域中的许多应用程序需要批量处理才能在关键任务环境中执行业务操作。这些业务运营包括:
无需用户交互即可最有效地处理大量信息的自动化,复杂处理。这些操作通常包括基于时间的事件。在非常大的数据集中重复处理复杂业务规则的定期应用。集成从内部和外部系统接收的信息,这些信息通常需要以事务方式格式化,验证和处理到记录系统中。批处理用于每天为企业处理数十亿的交易。
SpringBatch是一个轻量级,全面的批处理框架,旨在开发对企业系统日常运营至关重要的强大批处理应用程序。SpringBatch构建了人们期望的SpringFramework特性,同时使开发人员可以在必要时轻松访问和利用更高级的企业服务。SpringBatch不是一个schuedling的框架。
SpringBatch提供了可重用的功能,这些功能对于处理大量的数据至关重要,包括记录/跟踪,事务管理,作业处理统计,作业重启,跳过和资源管理。它还提供更高级的技术服务和功能,通过优化和分区技术实现极高容量和高性能的批处理作业。
SpringBatch可用于两种简单的用例以及复杂的大量用例上)。大批量批处理作业可以高度可扩展的方式利用该框架来处理大量信息。
一个典型的批处理应用程序大致如下:
从数据库,文件或队列中读取大量记录。以某种方式处理数据。以修改之后的形式写回数据。
其对应的示意如下:
springbatch的一个总体的架构如下:
在springbatch中一个job可以定义很多的步骤step,在每一个step里面可以定义其专属的ItemReader用于读取数据,ItemProcesseor用于处理数据,ItemWriter用于写数据,而每一个定义的job则都在JobRepository里面,我们可以通过JobLauncher来启动某一个job。
下面是一些概念是Springbatch框架中的核心概念。
什么是Job
Job和Step是springbatch执行批处理任务最为核心的两个概念。
其中Job是一个封装整个批处理过程的一个概念。Job在springbatch的体系当中只是一个最顶层的一个抽象概念,体现在代码当中则它只是一个最上层的接口,其代码如下:
/**
* Batch domain object representing a job. Job is an explicit abstraction
* representing the configuration of a job specified by a developer. It should
* be noted that restart policy is applied to the job as a whole and not to a
* step.
*/
public interface Job {
String getName();
boolean isRestartable();
void execute(JobExecution execution);
JobParametersIncrementer getJobParametersIncrementer();
JobParametersValidator getJobParametersValidator();
}
在Job这个接口当中定义了五个方法,它的实现类主要有两种类型的job,一个是simplejob,另一个是flowjob。在springbatch当中,job是最顶层的抽象,除job之外我们还有JobInstance以及JobExecution这两个更加底层的抽象。
一个job是我们运行的基本单位,它内部由step组成。job本质上可以看成step的一个容器。一个job可以按照指定的逻辑顺序组合step,并提供了我们给所有step设置相同属性的方法,例如一些事件监听,跳过策略。
SpringBatch以SimpleJob类的形式提供了Job接口的默认简单实现,它在Job之上创建了一些标准功能。一个使用javaconfig的例子代码如下:
@Bean
public Job footballJob() {
return this.jobBuilderFactory.get("footballJob")
.start(playerLoad())
.next(gameLoad())
.next(playerSummarization())
.end()
.build();
}
这个配置的意思是:首先给这个job起了一个名字叫footballJob,接着指定了这个job的三个step,他们分别由方法,playerLoad,gameLoad,playerSummarization实现。
什么是JobInstance
我们在上文已经提到了JobInstance,他是Job的更加底层的一个抽象,他的定义如下:
public interface JobInstance {
/**
* Get unique id for this JobInstance.
* @return instance id
*/
public long getInstanceId();
/**
* Get job name.
* @return value of "id" attribute from <job>
*/
public String getJobName();
}
他的方法很简单,一个是返回Job的id,另一个是返回Job的名字。推荐:Java面试题宝典
JobInstance指的是job运行当中,作业执行过程当中的概念。Instance本就是实例的意思。
文章为作者独立观点,不代表 股票程序化软件自动交易接口观点