Spring Batch 之 JobParameters (十)
来源:互联网 发布:淘宝极速退款卖家拒签 编辑:程序博客网 时间:2024/06/06 04:05
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其他的一些技术知识点。
如果您对本文有意见或者建议,欢迎留言,哪怕是拍砖(^_^)!
欢迎转载,请注明出处!
感谢您的阅读,请关注后续博客!
- Spring Batch 之 JobParameters (十)
- Spring Batch 之 JobParameters (十)
- Spring Batch 之 Spring Batch 简介(一)
- Spring Batch 之 Spring Batch 简介(一)
- Spring Batch之Spring Batch简介
- Spring Batch 之 Spring Batch 简介(一)
- Spring Batch 之 Spring Batch 简介(一)
- Spring Batch 之 Spring Batch 简介(一)
- Spring batch教程 之 spring batch简介
- Spring Batch 之 Spring Batch 简介
- Spring Batch 之 Spring Batch 简介
- Spring Batch 之 Spring Batch 简介
- Spring-Batch之HelloWorld
- Spring Batch之Hello World
- Spring Batch之FlatFile操作
- Spring Batch之skip讲解
- Spring batch 之操作数据库
- 数据处理---Spring Batch之基础
- Spring Batch 之 Sample(复合格式文件的读、多文件的写)(七)
- Spring Batch 之 Sample(游标方式读写DB数据表)(八)
- servlet3.0的学习(二)
- Spring Batch 之 skip讲解(九)
- servlet3.0的学习(三)
- Spring Batch 之 JobParameters (十)
- servlet3.0的学习(四)
- JavaScript核心指南 (ECMA-262-3)
- [置顶] cocos2d游戏开发,常用工具集合
- 基于 Eclipse 的 ClearCase UCM 和 ClearQuest 集成环境安装与使用
- Dijkstra模版
- 一个很好的命令(pkill),一次性杀死某用户所有进程。PS:其他杀进程命令
- 编程中常见错误原因
- CentOS添加解码器播放MP3和常见视频音频