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

  1. CREATE TABLE BATCH_JOB_INSTANCE  (
  2. JOB_INSTANCE_ID NUMBER(19,0)  NOT NULL PRIMARY KEY ,
  3. VERSION NUMBER(19,0) ,
  4. JOB_NAME VARCHAR2(100) NOT NULL,
  5. JOB_KEY VARCHAR2(32) NOT NULL,
  6. constraint JOB_INST_UN unique (JOB_NAME, JOB_KEY)
  7. ) ;
  8. CREATE TABLE BATCH_JOB_EXECUTION  (
  9. JOB_EXECUTION_ID NUMBER(19,0)  NOT NULL PRIMARY KEY ,
  10. VERSION NUMBER(19,0)  ,
  11. JOB_INSTANCE_ID NUMBER(19,0) NOT NULL,
  12. CREATE_TIME TIMESTAMP NOT NULL,
  13. START_TIME TIMESTAMP DEFAULT NULL ,
  14. END_TIME TIMESTAMP DEFAULT NULL ,
  15. STATUS VARCHAR2(10) ,
  16. EXIT_CODE VARCHAR2(100) ,
  17. EXIT_MESSAGE VARCHAR2(2500) ,
  18. LAST_UPDATED TIMESTAMP,
  19. constraint JOB_INST_EXEC_FK foreign key (JOB_INSTANCE_ID)
  20. references BATCH_JOB_INSTANCE(JOB_INSTANCE_ID)
  21. ) ;
  22. CREATE TABLE BATCH_JOB_PARAMS  (
  23. JOB_INSTANCE_ID NUMBER(19,0) NOT NULL ,
  24. TYPE_CD VARCHAR2(6) NOT NULL ,
  25. KEY_NAME VARCHAR2(100) NOT NULL ,
  26. STRING_VAL VARCHAR2(250) ,
  27. DATE_VAL TIMESTAMP DEFAULT NULL ,
  28. LONG_VAL NUMBER(19,0) ,
  29. DOUBLE_VAL NUMBER ,
  30. constraint JOB_INST_PARAMS_FK foreign key (JOB_INSTANCE_ID)
  31. references BATCH_JOB_INSTANCE(JOB_INSTANCE_ID)
  32. ) ;
  33. CREATE TABLE BATCH_STEP_EXECUTION  (
  34. STEP_EXECUTION_ID NUMBER(19,0)  NOT NULL PRIMARY KEY ,
  35. VERSION NUMBER(19,0) NOT NULL,
  36. STEP_NAME VARCHAR2(100) NOT NULL,
  37. JOB_EXECUTION_ID NUMBER(19,0) NOT NULL,
  38. START_TIME TIMESTAMP NOT NULL ,
  39. END_TIME TIMESTAMP DEFAULT NULL ,
  40. STATUS VARCHAR2(10) ,
  41. COMMIT_COUNT NUMBER(19,0) ,
  42. READ_COUNT NUMBER(19,0) ,
  43. FILTER_COUNT NUMBER(19,0) ,
  44. WRITE_COUNT NUMBER(19,0) ,
  45. READ_SKIP_COUNT NUMBER(19,0) ,
  46. WRITE_SKIP_COUNT NUMBER(19,0) ,
  47. PROCESS_SKIP_COUNT NUMBER(19,0) ,
  48. ROLLBACK_COUNT NUMBER(19,0) ,
  49. EXIT_CODE VARCHAR2(100) ,
  50. EXIT_MESSAGE VARCHAR2(2500) ,
  51. LAST_UPDATED TIMESTAMP,
  52. constraint JOB_EXEC_STEP_FK foreign key (JOB_EXECUTION_ID)
  53. references BATCH_JOB_EXECUTION(JOB_EXECUTION_ID)
  54. ) ;
  55. CREATE TABLE BATCH_STEP_EXECUTION_CONTEXT  (
  56. STEP_EXECUTION_ID NUMBER(19,0) NOT NULL PRIMARY KEY,
  57. SHORT_CONTEXT VARCHAR2(2500) NOT NULL,
  58. SERIALIZED_CONTEXT CLOB ,
  59. constraint STEP_EXEC_CTX_FK foreign key (STEP_EXECUTION_ID)
  60. references BATCH_STEP_EXECUTION(STEP_EXECUTION_ID)
  61. ) ;
  62. CREATE TABLE BATCH_JOB_EXECUTION_CONTEXT  (
  63. JOB_EXECUTION_ID NUMBER(19,0) NOT NULL PRIMARY KEY,
  64. SHORT_CONTEXT VARCHAR2(2500) NOT NULL,
  65. SERIALIZED_CONTEXT CLOB ,
  66. constraint JOB_EXEC_CTX_FK foreign key (JOB_EXECUTION_ID)
  67. references BATCH_JOB_EXECUTION(JOB_EXECUTION_ID)
  68. ) ;
  69. CREATE SEQUENCE BATCH_STEP_EXECUTION_SEQ START WITH 0 MINVALUE 0 MAXVALUE 9223372036854775807 NOCYCLE;
  70. CREATE SEQUENCE BATCH_JOB_EXECUTION_SEQ START WITH 0 MINVALUE 0 MAXVALUE 9223372036854775807 NOCYCLE;
  71. 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)。

  1. jobLauncher.run(job, new JobParametersBuilder()
  2. .addString("date", "2010-06-27")
  3. .toJobParameters()
  4. );

工作实例等式:

JobInstance = Job + Job-Parameters.

Job instance和Job execution的生命周期的一些规则:

a、当你第一次运行job的时候,spring batch创建job instance和第一个job execution。

b、当前面的同一个job instance被成功的执行完成之后,你不能再次运行这个job instance。

c、你不能同时执行多个相同的实例。

================ 基础部分结束 ============================

spring batch(一):基础部分的更多相关文章

  1. Spring Batch 体系结构

    Spring Batch 设计的时候充分考虑了可扩展性和各类终端用户. 下图显示了 Spring Batch 的架构层次示意图,这种架构层次为终端用户开发者提供了很好的扩展性与易用性. 上图显示的是 ...

  2. spring batch(二):核心部分(1):配置Spring batch

    spring batch(二):核心部分(1):配置Spring batch 博客分类: Spring 经验 java   chapter 3.Batch configuration 1.spring ...

  3. Spring Batch的事务-Part 1:基础

    原文 https://blog.codecentric.de/en/2012/03/transactions-in-spring-batch-part-1-the-basics/ This is th ...

  4. 初探Spring Batch

    此系列博客皆为学习Spring Batch时的一些笔记: 为什么我们需要批处理? 我们不会总是想要立即得到需要的信息,批处理允许我们在请求处理之前就一个既定的流程开始搜集信息:比如说一个银行对账单,我 ...

  5. Spring Batch 中文参考文档 V3.0.6 - 1 Spring Batch介绍

    1 Spring Batch介绍 企业领域中许多应用系统需要采用批处理的方式在特定环境中运行业务操作任务.这种业务作业包括自动化,大量信息的复杂操作,他们不需要人工干预,并能高效运行.这些典型作业包括 ...

  6. Spring Batch系列总括(转载)

    最近一个项目在使用SpringBatch框架做一个电子商务平台的批处理.网上资料很有限,尤其是中文资料更是少之又少,官网上的文档也只是讲一些入门的基础知识,大部分高级特性都是一笔带过,讲解的很不彻底, ...

  7. Spring Batch 专题

    如今微服务架构讨论的如火如荼.但在企业架构里除了大量的OLTP交易外,还存在海量的批处理交易.在诸如银行的金融机构中,每天有3-4万笔的批处理作业需要处理.针对OLTP,业界有大量的开源框架.优秀的架 ...

  8. 陪你解读Spring Batch(一)Spring Batch介绍

    前言 整个章节由浅入深了解Spring Batch,让你掌握批处理利器.面对大批量数据毫无惧色.本章只做介绍,后面章节有代码示例.好了,接下来是我们的主角Spring Batch. 1.1 背景介绍 ...

  9. spring batch (一) 常见的基本的概念介绍

    SpringBatch的基本概念介绍 内容来自<Spring Batch 批处理框架>,作者:刘相. 一.配置文件 在项目中使用spring batch 需要在配置文件中声明: 事务管理器 ...

随机推荐

  1. Elasticsearch日志收集

    Install pip if necessary curl "https://bootstrap.pypa.io/get-pip.py" -o "get-pip.py&q ...

  2. AWS S3 对象存储服务

    虽然亚马逊云非常牛逼,虽然亚马逊云财大气粗,虽然亚马逊用的人也非常多,可是这个文档我简直无法接受,特别是客服,令人发指的回复速度,瞬间让人无语,可是毕竟牛逼.忍了,躺一次坑而已 1.图片上传 1.1 ...

  3. jQuery中事件模块介绍

    事件模块 1.提供其他DOM方法 包括:next 和 nextAll方法 1.1 next方法实现 目标:扩展框架方法,获取当前元素的下一个元素 问题:如何获取下一个元素? 1.1.1 提供 next ...

  4. Java I/O streams

    I/O Streams Byte Streams 输入输出以字节为单位,所有的使用字节流的类都继承自 InputStream 和 OutputStream. Byte Streams 属于 low-l ...

  5. Redis入门笔记-redis内部数据结构(01)

    redis是一个轻量级的Nodsql数据库,使用kev-value的形式存储数据,在redis的世界里,没有整数.浮点数等概念,大多数情况下数据以字符串形式展现,偶尔会出现Long类型数据的场景. 一 ...

  6. H5动效的常见制作手法

    众所周知,一个元素,动往往比静更吸引眼球: 一套操作界面,合适的动态交互反馈能给用户带来更好的操作体验: 一个H5运营宣传页,炫酷的动画特效定能助力传播和品牌打造. 近两年,小到loading动画,表 ...

  7. anuglar.js ui-router传递参数

    anuglar.js ui-router 传递参数的方法有: 一: ui-sref 传递参数,传递一个参数的时候 首先路有这样写: .state('edit', { //线路编辑页面 url: '/e ...

  8. Js中的4个事件

    除了加载文档的事件onload和鼠标相关的一些事件如onclick,onmouseover等.js还有一些相对不常用的事件,这些事件也有各自的应用场景,本文就介绍 onkeydown,oncontex ...

  9. 文字左右滚动选择,改变direction的值

    1.从左到右滚动显示<marquee direction=left>测试</marquee> 2.从右到左滚动显示<marquee direction=right> ...

  10. type="radio"样式修改

    input[type=radio],input[type=checkbox] { display: inline-block; vertical-align: middle; width: 20px; ...