作者:微信小助手
发布时间:2022-07-17T00:53:34
spring batch是spring提供的一个数据处理框架。企业域中的许多应用程序需要批量处理才能在关键任务环境中执行业务操作。这些业务运营包括: Spring Batch是一个轻量级,全面的批处理框架,旨在开发对企业系统日常运营至关重要的强大批处理应用程序。Spring Batch构建了人们期望的Spring Framework特性(生产力,基于POJO的开发方法和一般易用性),同时使开发人员可以在必要时轻松访问和利用更高级的企业服务。Spring Batch不是一个schuedling的框架。 Spring Batch提供了可重用的功能,这些功能对于处理大量的数据至关重要,包括记录/跟踪,事务管理,作业处理统计,作业重启,跳过和资源管理。它还提供更高级的技术服务和功能,通过优化和分区技术实现极高容量和高性能的批处理作业。 Spring Batch可用于两种简单的用例(例如将文件读入数据库或运行存储过程)以及复杂的大量用例(例如在数据库之间移动大量数据,转换它等等) 上)。大批量批处理作业可以高度可扩展的方式利用该框架来处理大量信息。 一个典型的批处理应用程序大致如下: 其对应的示意图如下: spring batch的一个总体的架构如下: 在spring batch中一个job可以定义很多的步骤step,在每一个step里面可以定义其专属的ItemReader用于读取数据, 下面是一些概念是Spring batch框架中的核心概念。 Job和Step是spring batch执行批处理任务最为核心的两个概念。 其中Job是一个封装整个批处理过程的一个概念。Job在spring batch的体系当中只是一个最顶层的一个抽象概念,体现在代码当中则它只是一个最上层的接口,其代码如下: 在Job这个接口当中定义了五个方法,它的实现类主要有两种类型的job,一个是simplejob,另一个是flowjob。在spring batch当中,job是最顶层的抽象,除job之外我们还有 一个job是我们运行的基本单位,它内部由step组成。job本质上可以看成step的一个容器。一个job可以按照指定的逻辑顺序组合step,并提供了我们给所有step设置相同属性的方法,例如一些事件监听,跳过策略。 Spring Batch以 这个配置的意思是:首先给这个job起了一个名字叫 我们在上文已经提到了 他的方法很简单,一个是返回Job的id,另一个是返回Job的名字。 比如说现在有一个批处理的job,它的功能是在一天结束时执行行一次。我们假定这个批处理job的名字为' 在上文当中我们提到了,同一个job每天运行一次的话,那么每天都有一个 spring batch中提供的用来标识一个 例如, 我们前面的'EndOfDay'的job现在已经有了两个实例,一个产生于1月1日,另一个产生于1月2日,那么我们就可以定义两个 因此,我么可以通过 还是以前面描述的EndOfDay的job作为示例,假设第一次运行
- Spring Batch架构介绍
ItemProcesseor
用于处理数据,ItemWriter用于写数据,而每一个定义的job则都在JobRepository
里面,我们可以通过JobLauncher
来启动某一个job。关注公众号:“码猿技术专栏”,回复关键词:“081“ 获取阿里内部的Spring Cloud Alibaba进阶教程!Spring Batch核心概念介绍
什么是Job
/**
* 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();
}JobInstance
以及JobExecution
这两个更加底层的抽象。推荐Java之家:www.java-fmaily.cnSimpleJob
类的形式提供了Job接口的默认简单实现,它在Job之上创建了一些标准功能。一个使用java config
的例子代码如下:@Bean
public Job footballJob() {
return this.jobBuilderFactory.get("footballJob")
.start(playerLoad())
.next(gameLoad())
.next(playerSummarization())
.end()
.build();
}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();
}JobInstance
指的是job运行当中,作业执行过程当中的概念。Instance本就是实例的意思。关注公众号:“码猿技术专栏”,回复关键词:“081“ 获取阿里内部的Spring Cloud Alibaba进阶教程!EndOfDay
'。在这个情况下,那么每天就会有一个逻辑意义上的JobInstance
, 而我们必须记录job的每次运行的情况。什么是JobParameters
jobIntsance
,但他们的job定义都是一样的,那么我们怎么来区别一个job的不同jobinstance
了。不妨先做个猜想,虽然jobinstance
的job定义一样,但是他们有的东西就不一样,例如运行时间。jobinstance
的东西是:JobParameters
。JobParameters
对象包含一组用于启动批处理作业的参数,它可以在运行期间用于识别或甚至用作参考数据。我们假设的运行时间,就可以作为一个JobParameters
。JobParameter
对象:一个的参数是01-01, 另一个的参数是01-02。因此,识别一个JobInstance
的方法可以定义为:
Jobparameter
来操作正确的JobInstance
什么是JobExecution
JobExecution
指的是单次尝试运行一个我们定义好的Job的代码层面的概念。job的一次执行可能以失败也可能成功。只有当执行成功完成时,给定的与执行相对应的JobInstance
才也被视为完成。01-01-2019
的JobInstance
结果是失败。那么此时如果使用与第一次运行相同的Jobparameter
参数(即01-01-2019)作业参数再次运行,那么就会创建一个对应于之前jobInstance
的一个新的JobExecution
实例,JobInstance
仍然只有一个。JobExecution
的接口定义如下:public interface JobExecution {
/**