`
mowengaobo
  • 浏览: 161076 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

Spring Batch 之 JobParameters (十)

 
阅读更多

 继续前面关于Spring Batch系列的文章,本文主要介绍与JobParameters相关的一些知识。

一、JobParameters

      顾名思义,所谓JobParameters,就是Job运行时的参数。它在bath中有两个作用:一是标示不同的jobInstance,二是作为job中用到的信息,以参数的形式传给job。

      如何使用JobParameters呢?它主要是在启动的job的时候,与job联系起来的。看一下框架提供的启动job的接口JobLauncher的源代码,就会发现其run方法需要两个参数,一个是Job,也就是需要启动的job,另一个就是JobParameters。可以通过如下方式使用:

      jobLauncher.run(job, new JobParametersBuilder() 

                                           .addString("para1", "value1") 

                                           .addString("para2","value2")

                                           .toJobParameters()

                              );

如代码所示,参数para1和para2就可以传给Job了,在Job中如果需要使用参数信息,可以使用Spring注入的方式传给不同的使用对象。

<bean:bean id="itemReader" class="com.wanggc.springbatch.BatchItemReader" scope="step">
<bean:property name="filePath" value="#{jobParameters['inputFilePath']}" />
</bean:bean>

注意需要设置Bean的scope属性为step,这是SpringBatch的一个后绑定技术,就是在生成Step的时候,才去创建bean,因为这个时候jobparameter才传过来。如果加载配置信息的时候就创建bean,这个时候jobparameter的值还没有产生,会抛出异常。

二、JobParametersValidator

      SpringBatch框架支持JobParameters的简单验证,并提供了JobParametersValidator接口和validate方法,用于在job启动之前对参数信息验证和检查。如果需要对参数进行验证,就可以实现此接口,并在validate方法中定制验证规则,当验证失败的时候,会抛出JobParametersInvalidException异常。当然,SpringBatch框架也提供了一个默认的验证类DefaultJobParametersValidator,但此类验证功能有限,主要用于必须项和非必须项的验证。通过如下配置可以实现此验证功能。

复制代码
<job id="batchJob">            
......
<validator ref="jobParametersValidator" />
</job>
<bean:bean id="jobParametersValidator"
class
="org.springframework.batch.core.job.DefaultJobParametersValidator">
<bean:property name="requiredKeys">
<bean:set>
<bean:value>para1</bean:value>
<bean:value>para2</bean:value>
<bean:value>para3</bean:value>
</bean:set>
</bean:property>
<bean:property name="optionalKeys">
<bean:set>
<bean:value>para4</bean:value>
</bean:set>
</bean:property>
</bean:bean>
复制代码

      DefaultJobParametersValidator类提供两个重要属性:requiredKeys和optionalKeys,前者为JobParameters中必须包含的项,但对参数的实际值不做check(不做空的check),只要包含此项的key就可以了;后者为可选项,有没有此项都可以。但如果JobParameters中含有两者以外的项,也会抛出JobParametersInvalidException异常。

三、JobParametersIncrementer

      JobParametersIncrementer主要用于JobOperator接口的startNextInstance等方法启动job的情况下。同一个Job在batch启动后被多次调用的场合,startNextInstance方法将会非常有用,因为它将使用JobParametersIncrementer与Job绑定,创建一个新实例。因为JobParametersIncrementer有一个getNext方法,可以在此方法中为parameters添加一个自增的值,以区分不同的Job实例,当然,这个值在job的其他的地方并不会用到,仅仅是为了标示不同JobInstance。当然SpringBatch框架也为我们提供了一个JobParametersIncrementer的实现类RunIdIncrementer 。使用方法如下:

<job id="batchJob" incrementer="sampleIncrementer">        
......
<validator ref="jobParametersValidator" />
</job>
<bean:bean id="sampleIncrementer"
class
="org.springframework.batch.core.launch.support.RunIdIncrementer"/>

      RunIdIncrementer的getNext方法实现如下:

复制代码
public JobParameters getNext(JobParameters parameters) {            
if (parameters == null) {
parameters = new JobParameters();
}
long id = parameters.getLong(key, 0L) + 1;
return new JobParametersBuilder(parameters).addLong(key, id).toJobParameters();
}
复制代码

      由代码可以看出,当parameters为null时,创建一个新的JobParameters,并添加一项“key”;不为null时,直接给原来的parameters添加一项。最后直接返回。因为key代表的value每次是都会在原来的基础上加1,这样就保证了每次创建的jobInstance是不同的了。

     以上,就是JobParameters主要知识点的介绍,下次,将介绍SpringBatch其他的一些技术知识点。

 作者:孤旅者 出处:http://www.cnblogs.com/gulvzhe/

分享到:
评论

相关推荐

    Spring.Batch批处理框架

    Spring Batch是Spring的一个子项目,使用Java语言并基于Spring框架为基础开发,使得已经使用 Spring 框架的开发者或者企业更容易访问和利用企业服务。 Spring Batch 提供了大量可重用的组件,包括了日志、追踪、事务、...

    Spring Boot整合Spring Batch,实现批处理

    Spring Boot整合Spring Batch的一个小例子,在网上发现这方面的资源比较少,特此将其上传供大家学习。

    Spring Batch API(Spring Batch 开发文档).CHM

    Spring Batch API(Spring Batch 开发文档).CHM。 官网 Spring Batch API,Spring Batch 开发文档

    spring-batch包

    spring-batch4.0.0 batch spring-batch集成 spring-batch.jar

    The Definitive Guide to Spring Batch, 2nd Edition.epub

    Work with all aspects of batch processing in a modern Java environment using a selection of Spring frameworks. This book provides up-to-date examples using the latest configuration techniques based on...

    springbatch 详解PDF附加 全书源码 压缩包

    spring batch批处理框架和对应的源码资源 rar 可以直接运行的

    SpringBatch+Spring+Mybatis+MySql (spring batch 使用jar)

    Spring Batch是一个轻量级的,完全面向Spring的批处理框架,可以应用于企业级大量的数据处理系统。Spring Batch以POJO和大家熟知的Spring框架为基础,使开发者更容易的访问和利用企业级服务。Spring Batch可以提供...

    基于Spring Batch的大数据量并行处理

    基于Spring Batch的大数据量并行处理 基于Spring Batch的大数据量并行处理

    springBoot+springBatch批量处理数据demo

    最近在研究springBoot+springbatch ,按照官网的实例做了一个实例。 最近在研究springBoot+springbatch ,按照官网的实例做了一个实例。

    Spring Batch读取txt文件并写入数据库的方法教程

    主要给大家介绍了Spring Batch读取txt文件并写入数据库的方法,SpringBatch 是一个轻量级、全面的批处理框架。这里我们用它来实现文件的读取并将读取的结果作处理,处理之后再写入数据库中的功能。需要的朋友可以...

    spring batch in action

    Spring Batch in Action is a comprehensive, in-depth guide to writing batch applications using Spring Batch. Written for developers who have basic knowledge of Java and the Spring lightweight ...

    SpringBatch-DataMigration SpringBatch数据迁移项目

    mybatis、springBatch、mysql、quartz、spring、springMVC 部署说明: 本项目为两个数据库,由一个数据库的表向另外一个数据库的表做数据迁移,其中数据库脚本在:/src/main/resources/sql/下面(其中data_rep中的表...

    spring batch批处理 教程

    四,Spring Batch之Step执行过程介绍 6 五,Spring Batch应用 7 1,简单应用 7  构建应用 7  对象定义 7  读写及处理接口 8  任务定义 10  任务执行 11  任务重试 13  运行时管理 14 2,高级应用 16 ...

    SpringBatch数据库建表语句.txt

    SpringBatch数据库建表语句,存储springBatch批处理过程中需要保存的数据和步骤信息

    使用spring batch需要在数据库建立的几个表——建表语句

    使用spring batch需要在数据库建立的几个表——建表语句(BATCH_JOB_INSTANCE、BATCH_JOB_EXECUTION、BATCH_JOB_EXECUTION_CONTEXT、`BATCH_JOB_EXECUTION_PARAMS` 、`BATCH_JOB_EXECUTION_SEQ` 、`BATCH_JOB_SEQ` ...

    SpringBatch批处理 刘相编

    《Spring Batch 批处理框架》全面、系统地介绍了批处理框架Spring Batch,通过详尽的实战示例向读者展示了Spring Batch框架对大数据批处理的基本开发能力,并对框架的架构设计、源码做了特定的剖析;在帮助读者掌握...

    SpringBatch批处理框架

    资源名称:Spring Batch 批处理框架内容简介:《Spring Batch 批处理框架》全面、系统地介绍了批处理框架Spring Batch,通过详尽的实战示例向读者展示了Spring Batch框架对大数据批处理的基本开发能力,并对框架的...

    详细spring batch资料

    难得的详细spring batch资料 难得的详细spring batch资料

    Spring Batch批处理框架

    Spring Batch批处理框架Spring Batch批处理框架Spring Batch批处理框架

    SpringBatch+SpringBoot构建海量数据企业批处理系统和性能优化

    SpringBatch+SpringBoot构建海量数据企业批处理系统和性能优化,Spring Batch是一个基于Spring的企业级批处理框架,所谓企业批处理就是指在企业级应用中,不需要人工干预,定期读取数据,进行相应的业务处理之后,再...

Global site tag (gtag.js) - Google Analytics