`
mowengaobo
  • 浏览: 166189 次
  • 性别: 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 3.0引入了多项新特性,其中JSR-352(Java Batch规范)支持是重要的更新之一,它为批处理提供了一种标准化的API。同时,改进的Spring Batch Integration模块为与Spring Integration的整合提供了更好的...

    spring-batch同步数据库mysql源码

    《Spring-Batch同步数据库MySQL源码解析》 在IT领域,数据同步是一项至关重要的任务,尤其是在分布式系统中,保持数据库的一致性是确保系统稳定运行的关键。Spring-Batch作为Spring框架的一部分,为批量处理和数据...

    spring-batch-reference.pdf

    此外,SpringBatch还支持对批处理作业的元数据进行高级操作,例如查询Repository、注册Job和Step、管理JobParameters等。这些高级特性使SpringBatch成为一个功能强大的企业级批处理框架。 SpringBatch的最新版本...

    spring batch 2.1.8版本

    ### Spring Batch 2.1.8 版本详解 #### 一、Spring Batch 简介 ##### 1.1 背景介绍 Spring Batch 是一个强大的批量处理框架,旨在简化开发大型批量数据处理应用的过程。该框架提供了一种灵活且可扩展的方式来构建...

    Spring.Batch.in.Action.pdf

    ### Spring Batch核心概念与应用详解 #### 春季批次行动:Spring Batch全面解析 《Spring Batch in Action》是一本深入探讨Spring Batch框架的专著,由Arnaud Cogoluègnes、Thierry Templier、Gary Gregory和...

    spring batch 源码

    Spring Batch 是一个强大的、全面的批处理框架,用于处理大量数据。它被广泛应用于企业级应用,特别是那些需要处理大量输入/输出数据的系统。在深入理解 Spring Batch 的源码之前,我们需要先了解一下 Spring Batch ...

    Spring Batch 文档

    JobRepository是Spring Batch的核心组件之一,负责持久化Job和Step的执行状态,确保作业的重启能力和事务一致性。 #### 3.5 JobLauncher JobLauncher用于启动Job,可以是单个Job或一系列Job,它是与外部系统的接口...

    spring batch Doc

    块导向处理是Spring Batch 中处理大量数据的关键技术之一,它可以显著提高数据处理效率。 - **5.1.1 配置Step** 配置Step主要包括指定Item Reader、Item Processor 和 Item Writer,以及设置事务管理器等。 - **...

    spring-batch

    **Spring Batch** 是一个构建于 **Spring Framework** 之上的强大批处理框架,它主要用于处理大量的数据记录,如日志文件、数据库导出等场景。该框架提供了一种灵活且可扩展的方式来定义批处理作业,使得开发人员...

    spring batch 英文文档

    JobRepository是Spring Batch的核心组件之一,负责管理JobExecution和StepExecution的生命周期,提供事务管理、持久化等功能。 ### JobLauncher JobLauncher用于启动Job,它可以将Job配置参数传递给Job,并控制Job...

    Spring Batch

    Spring Batch 是一个构建在 Spring 框架之上的批量处理框架,专为处理大量数据而设计。该框架提供了丰富的功能来支持批量数据处理,如日志记录、事务管理、作业监控与重启能力、数据读取与写入等。Spring Batch 的...

    spring batch

    Spring Batch是一款基于Spring框架开发的企业级批处理应用框架。它为开发者提供了丰富的批处理作业执行功能,并且支持事务管理,能够轻松地处理大量数据的读取、更新、删除等操作。Spring Batch适合用于数据导入/...

    spring batch 读取多个文件数据导入数据库示例

    `&lt;context:component-scan&gt;` 指令扫描指定包(这里为 `com.aliyun.springbatch`)中的 Spring Batch 组件,例如 Job、Step、ItemReader 和 ItemWriter。`jobLauncher` 和 `jobRepository` 是执行批处理作业的核心...

    手把手教你搭建第一个Spring Batch项目的步骤

    Spring Batch 是一个专门为批量处理设计的轻量级框架,它...Spring Batch的强大之处在于其灵活性和可扩展性,能够适应各种批处理场景。通过不断的实践和学习,你将能够充分利用Spring Batch的优势,处理大数据任务。

    SpringBatch/JobLauncher/循环任务/监听/传参数

    `JobLauncher`是SpringBatch的核心组件之一,它是执行`Job`实例的入口点。通过调用`JobLauncher`的`launch()`方法,我们可以启动一个作业。`JobLauncher`与`JobRepository`一起工作,负责初始化、运行和管理`Job`...

    Spring的批处理框架

    Spring Batch 是一个构建于Spring框架之上的批量处理框架,它为开发者提供了一种简单而强大的方式来实现复杂的批处理作业。该框架主要关注于后台批量数据处理的需求,如数据迁移、定期报告生成等任务。 **1.1 背景*...

    spring-batch-kubernetes-gs:Kuernetes上的Spring Batch(GKE)-入门

    GKE上的Spring Batch Spring Batch Job在GKE上运行 描述 Spring批处理模型 工作 它是一个封装整个批处理过程的实体 它只是Step实例的容器 它组合了逻辑上属于流程的多个步骤,并允许配置所有步骤全局的属性 步它是...

    SpringBatch:示例 Spring Batch 应用程序将从 CSV 读取数据并将其存储在数据库中

    **SpringBatch 深度解析:CSV 数据处理与数据库存储** SpringBatch 是一个全面的、企业级的批处理框架,由 Spring 社区开发,它为处理大量数据提供了灵活、可扩展的解决方案。本篇文章将深入探讨如何使用 Spring ...

    Spring下配置job

    在Spring框架中,配置Job通常指的是使用Spring Batch来实现批处理任务。Spring Batch是一个功能强大且灵活的批处理处理框架,适用于大型数据处理场景。它提供了很多核心功能,包括读取、处理和写入大量数据,以及...

    Spring启动批次样本

    Spring Batch作为Spring Framework的一部分,提供了一套完整的批处理解决方案,包括事务管理、错误处理、日志跟踪等功能。 在Spring Boot项目中集成Spring Batch,我们首先需要在`pom.xml`中引入相应的依赖。在`...

Global site tag (gtag.js) - Google Analytics