spring batch
官网:
http://www.springsource.org/spring-batch
下载页面:
http://static.springsource.org/spring-batch/downloads.html
文档:
http://static.springsource.org/spring-batch/reference/index.html
数据库表格创建连接:DDL
http://static.springsource.org/spring-batch/reference/html/metaDataSchema.html#exampleDDLScripts
chapter 1、Introducing Spring Batch
spring batch需要依赖关系型数据库才能运行,在它的官方文档中的附录中,有创建它依赖的数据库表结构。
spring batch设计的目标:
1、大数据处理
2、自动化的
3、健壮的
4、可信赖的
5、高性能的
配置文件中 chunk 里面的 commit-interval="100"的大小,就是chunk块的大小。它们是一回事。
chunk 里面有 ItemReader ItemProcessor ItemWriter , ItemReader一次读取一条记录,ItemProcessor一次处理一条记录,ItemWriter一次输入commit-interval="100"指定事物大小的记录数(也就是chunk块的大小)。
推荐的commit-interval的大小是 10 至 200。 如果这个数值太大,如果是输出数据到数据库,会造成数据库的事物数据太大,影响数据库的性能,数据库会记录很多回滚数据的事物内容,造成性能低下。这个值太小,又会造成很多事务的产生,造成spring batch运行缓慢。
可以用SpEL动态配置程序运行的参数,例如:
<property name="resource"value="file:#{jobParameters['inputResource']}" />
这里需要注意一点,bean的scope必须为 “step”。在spring 3.×中支持 SPEL表达式。
<bean id="reader" class="org.springframework.batch.item.file.FlatFileItemReader" scope="step">
下面是spring batch的元数据表,oracle数据库的DDL
CREATE TABLE BATCH_JOB_INSTANCE ( JOB_INSTANCE_ID NUMBER(19,0) NOT NULL PRIMARY KEY , VERSION NUMBER(19,0) , JOB_NAME VARCHAR2(100) NOT NULL, JOB_KEY VARCHAR2(32) NOT NULL, constraint JOB_INST_UN unique (JOB_NAME, JOB_KEY) ) ; CREATE TABLE BATCH_JOB_EXECUTION ( JOB_EXECUTION_ID NUMBER(19,0) NOT NULL PRIMARY KEY , VERSION NUMBER(19,0) , JOB_INSTANCE_ID NUMBER(19,0) NOT NULL, CREATE_TIME TIMESTAMP NOT NULL, START_TIME TIMESTAMP DEFAULT NULL , END_TIME TIMESTAMP DEFAULT NULL , STATUS VARCHAR2(10) , EXIT_CODE VARCHAR2(100) , EXIT_MESSAGE VARCHAR2(2500) , LAST_UPDATED TIMESTAMP, constraint JOB_INST_EXEC_FK foreign key (JOB_INSTANCE_ID) references BATCH_JOB_INSTANCE(JOB_INSTANCE_ID) ) ; CREATE TABLE BATCH_JOB_PARAMS ( JOB_INSTANCE_ID NUMBER(19,0) NOT NULL , TYPE_CD VARCHAR2(6) NOT NULL , KEY_NAME VARCHAR2(100) NOT NULL , STRING_VAL VARCHAR2(250) , DATE_VAL TIMESTAMP DEFAULT NULL , LONG_VAL NUMBER(19,0) , DOUBLE_VAL NUMBER , constraint JOB_INST_PARAMS_FK foreign key (JOB_INSTANCE_ID) references BATCH_JOB_INSTANCE(JOB_INSTANCE_ID) ) ; CREATE TABLE BATCH_STEP_EXECUTION ( STEP_EXECUTION_ID NUMBER(19,0) NOT NULL PRIMARY KEY , VERSION NUMBER(19,0) NOT NULL, STEP_NAME VARCHAR2(100) NOT NULL, JOB_EXECUTION_ID NUMBER(19,0) NOT NULL, START_TIME TIMESTAMP NOT NULL , END_TIME TIMESTAMP DEFAULT NULL , STATUS VARCHAR2(10) , COMMIT_COUNT NUMBER(19,0) , READ_COUNT NUMBER(19,0) , FILTER_COUNT NUMBER(19,0) , WRITE_COUNT NUMBER(19,0) , READ_SKIP_COUNT NUMBER(19,0) , WRITE_SKIP_COUNT NUMBER(19,0) , PROCESS_SKIP_COUNT NUMBER(19,0) , ROLLBACK_COUNT NUMBER(19,0) , EXIT_CODE VARCHAR2(100) , EXIT_MESSAGE VARCHAR2(2500) , LAST_UPDATED TIMESTAMP, constraint JOB_EXEC_STEP_FK foreign key (JOB_EXECUTION_ID) references BATCH_JOB_EXECUTION(JOB_EXECUTION_ID) ) ; CREATE TABLE BATCH_STEP_EXECUTION_CONTEXT ( STEP_EXECUTION_ID NUMBER(19,0) NOT NULL PRIMARY KEY, SHORT_CONTEXT VARCHAR2(2500) NOT NULL, SERIALIZED_CONTEXT CLOB , constraint STEP_EXEC_CTX_FK foreign key (STEP_EXECUTION_ID) references BATCH_STEP_EXECUTION(STEP_EXECUTION_ID) ) ; CREATE TABLE BATCH_JOB_EXECUTION_CONTEXT ( JOB_EXECUTION_ID NUMBER(19,0) NOT NULL PRIMARY KEY, SHORT_CONTEXT VARCHAR2(2500) NOT NULL, SERIALIZED_CONTEXT CLOB , constraint JOB_EXEC_CTX_FK foreign key (JOB_EXECUTION_ID) references BATCH_JOB_EXECUTION(JOB_EXECUTION_ID) ) ; CREATE SEQUENCE BATCH_STEP_EXECUTION_SEQ START WITH 0 MINVALUE 0 MAXVALUE 9223372036854775807 NOCYCLE; CREATE SEQUENCE BATCH_JOB_EXECUTION_SEQ START WITH 0 MINVALUE 0 MAXVALUE 9223372036854775807 NOCYCLE; CREATE SEQUENCE BATCH_JOB_SEQ START WITH 0 MINVALUE 0 MAXVALUE 9223372036854775807 NOCYCLE;
[备注] SQL 脚本在spring batch的核心jar包中有提供。例如: spring-batch-core-2.1.9.RELEASE.jar的核心包org.springframework.batch.core中,schema-drop-[database].sql 的形式提供了各种主流关系型数据库的sql脚本。
spring batch支持的数据库有:Derby, H2, HSQLDB,MySQL, Oracle, PostgreSQL, SQLServer, and Sybase.
chapter 2、Spring Batch concepts
1、spring batch 的主要组件:
Job Repository持久化job执行元数据的基础组件
Job launcher引导job执行的基础组件
Jobbatch处理的应用组件
Stepjob内部的一个词语,一个job由一系列的step组成
Tasklet在step里面应用事务的,可重复执行的处理步骤
Item从数据源输入或者输出的一条记录
Chunk指定大小的item的列表。
Item reader负责从数据源读取item记录的组件
Item Processor负责处理(转换、验证、过滤等动作)item记录的组件
Item writer负责向数据源输出一个chunk的items,即:向数据源输出指定大小的item的列表的组件
2、spring batch如何和外部交互的
外部的cron,quartz等调度,或者web等,可以调用launch,触发spring batch的运行。
3、spring batch的基础组件包括:job launch和job repository。 它们不需要开发人员进行开发,只需要在配置文件中进行配置。
spring batch 的job是一系列在spring batch XML中的step组成。
4、Tasklet的使用
创建一个步骤(step),包括写一个tasklet执行或使用一个Spring Batch提供的tasklet。
当需要解压文件、调用存储过程、或者删除文件、调用sh脚本的时候,需要自己创建Tasklet的实现。
当实现tasklet的时候,这些需求可以划分为batch的read-process-write模式,那么就应该使用chunk元素配置tasklet,作为chunk processing处理步骤。chunk元素使得你的程序更加有效地读取,处理和写入数据。
小结:工作(job)是一系列的步骤(step),这些内容你可以轻易的在spring batch的xml里面进行定义。而步骤(step)由tasklet组成。tasklet可以由“面向模块”编程的chunk组成,或者tasklet完全来由开发者进行定制。
5、Job的相关概念
a、Job工作
b、Job instance工作实例
c、Job execution执行工作
一个工作(job)可以拥有很多工作实例(job instance),每个工作实例(job instance)可以拥有很多工作执行(job execution)。
在Spring Batch中,工作实例(job instance)包括工作(job)和工作参数(job parameter)。
jobLauncher.run(job, new JobParametersBuilder() .addString("date", "2010-06-27") .toJobParameters() );
工作实例等式:
JobInstance = Job + Job-Parameters.
Job instance和Job execution的生命周期的一些规则:
a、当你第一次运行job的时候,spring batch创建job instance和第一个job execution。
b、当前面的同一个job instance被成功的执行完成之后,你不能再次运行这个job instance。
c、你不能同时执行多个相同的实例。
================ 基础部分结束 ============================
相关推荐
Spring Boot以其简洁的配置和快速的启动能力深受开发者喜爱,而Spring Batch作为Spring框架的一部分,专注于批量处理任务,提供了强大的数据处理能力和事务管理功能。下面我们将深入探讨这个主题。 首先,**Spring ...
该示例程序采用的是Spring 3作为基础框架,以及Spring Batch 2.2.7版本,这两个组件都是Spring生态系统的重要部分。 **Spring Batch 的核心概念:** 1. **Job**:Job是Spring Batch中的顶级概念,代表一个完整的...
Spring Batch是一个轻量级、全面的批处理框架,用于开发生产级的批处理应用,尤其是那些需要高效、可靠地处理大量数据的应用。Spring Batch提供了可重复使用的功能,这些功能在处理大量记录时非常重要,例如事务管理...
10. **与Spring框架的集成**:作为Spring生态系统的一部分,Spring Batch 可以无缝地与其他Spring组件如Spring Data、Spring Integration等集成,提供更强大的解决方案。 在压缩包"spring bathch with lib"中,你将...
《Spring Batch In Action》这本书由Arnaud Cogoluegnes、Thierry Templier、Gary Gregory和Olivier Bazoud共同编写,是Spring框架系列书籍中的一个重要组成部分,主要聚焦于Spring Batch这一子项目。Spring Batch是...
Spring Batch是Spring框架的一个组成部分,专门用于处理大量数据的批处理作业。它提供了一套强大的工具和API,用于构建、运行和管理复杂的批处理流程。Spring Batch的设计原则是简单性、可扩展性和可靠性,这使得...
Spring Batch 还定义了一套专业的术语,包括Job、Step、ItemReader、ItemWriter、ItemProcessor等,这些都是理解和使用Spring Batch 的基础。 文档还介绍了如何配置并运行Job,包括JobRepository 和JobLauncher 的...
Spring Batch 是一个专门为Java开发的批量处理框架,它在企业级数据处理中扮演着至关重要的角色。这个框架基于Spring框架的POJO(Plain Old Java Object)原则,使得开发者能够更轻松地利用各种企业级服务,如事务...
在压缩包"spring-batch-2.1.zip"中,"SpringBatch"可能是解压后的文件夹名,其中可能包含了Spring Batch 2.1版本的所有JAR文件和其他必要的依赖库,方便用户快速构建和运行Spring Batch项目。在实际使用时,需要根据...
通常,一个Spring Batch 示例会包含以下几个关键部分: 1. **Job Configuration**: 定义Job和Step的配置。 2. **Reader and Writer Implementations**: 实现特定数据源的ItemReader和ItemWriter。 3. **Processor ...
SpringBatch是SpringSource与Accenture合作开发的一个开源大数据量并行处理框架。它提供了丰富的参考经验,Accenture在工业级别的批处理架构上拥有丰富的经验,而SpringSource则基于深刻的Spring框架编程模型。...
### Spring Batch核心知识点详解 #### 一、Spring Batch简介 ...无论是从基础的配置到高级的异常处理,Spring Batch 都考虑到了各种可能的需求场景,使得开发者能够根据实际需求灵活选择最适合的解决方案。
Spring_Batch是一个轻量级的、面向Spring框架的批处理框架,它的核心目标是为企业级系统提供高性能的数据处理能力。它支持大量数据的处理,拥有包括日志记录、事务管理、统计作业处理、重新启动和跳过等在内的诸多...
Spring框架是Java开发中的重要组成部分,它提供了依赖注入(Dependency Injection,DI)和面向切面编程(Aspect-Oriented Programming,AOP)等核心特性,极大地简化了应用程序的构建。Spring框架包括多个模块,如...
6. **Spring Boot**:虽然Spring Boot不是4.3.8.RELEASE的一部分,但在这个版本中,Spring Boot的兼容性得到了优化,使得创建独立的、生产级别的Spring应用程序变得更加容易。 7. **Spring Batch**:用于处理批量...
文档的描述部分提示了内容的全面性,其中提到涵盖了批处理和Spring的关系、Spring Batch基础知识、作业和步骤的理解、作业仓库及元数据、运行作业、读取器、项目处理器、项目写入器、示例应用程序、系统扩展与调优...
- **定义**:一种编程范式,用于将横切关注点(如日志记录、事务管理等)从业务逻辑中分离出来。 - **关键概念**: - **切面**:封装了横切关注点的模块。 - **连接点**:程序执行过程中的某个特定点,如方法调用...
Spring Batch 是一个构建在 Spring 框架之上的批量处理框架,专为处理大量数据而设计。该框架提供了丰富的功能来支持批量数据处理,如日志记录、事务管理、作业监控与重启能力、数据读取与写入等。Spring Batch 的...
1. **Spring Batch基础** Spring Batch是Spring Framework的一部分,专为处理大量数据而设计。它提供了一组全面的服务,包括事务管理、错误处理、日志记录和作业持久化。核心概念包括作业(Job)、步骤(Step)、读...
"primeiro-projeto-springbatch"是一个初学者导向的 Spring Batch 示例项目,旨在帮助开发者了解如何使用 Spring Batch 构建批处理应用。该项目的核心目标是演示如何设计一个简单的 Spring Batch 流程,这通常包括...