Spring Batch
作者:孤旅者
Blog:wwwblogs/gulvzhe
整理者:大海
声明:此系列博文出自博客园,版权归原作者和博客园所有,转载请注明出处。只能用于学习之用。任何版权问题整理者概不负责!
Spring Batch系列总括
最近一个项目在使用SpringBatch框架做一个电子商务平台的批处理。网上资料很有限,尤其是中文资料更是少之又少,上的文档也只是讲一些入门的基础知识,大部分高级特性都是一笔带过,讲解的很不彻底,在实际开发中碰到的问题很多。因此,特将自己学习、应用Spring Batch的过程总结成一个个小实例写成随笔。一是备忘,二是抛砖引玉,希望更多的高手能参与进来,指出其中的不足和提出自己的见解,大家共通讨论学习。
写过的关于SpringBatch的随笔主要有以下几篇:
Spring Batch 之Spring Batch 简介(一)
Spring Batch 之框架流程简单介绍(二)
Spring Batch 之Sample(Hello World)(三)
Spring Batch 之Sample(CSV文件操作)(四)
Spring Batch 之Sample(XML文件操作)(五)
Spring Batch 之Sample(固定长格式文件读写)(六)
Spring Batch 之Sample(复合格式文件的读、多文件的写)(七)
Spring Batch 之Sample(游标方式读写DB数据表)(八)
Spring Batch 之skip讲解(九)
Spring Batch 之JobParameters(十)
后续关于Spring Batch的随笔继续更新中
Spring Batch 之 Spring Batch 简介(一)
Spring Batch是一个轻量级的,完全面向Spring的批处理框架,可以应用于企业级大量的数据处理系统。Spring Batch以POJO和大家熟知的Spring框架为基础,使开发者更容易的访问和利用企业级服务。Spring Batch可以提供大量的,可重复的数据处理功能,包括日志记录/跟踪,事务管理,作业处理统计工作重新启动、跳过,和资源管理等重要功能。
业务方案:
1、批处理定期提交。
2、并行批处理:并行处理工作。
3、企业消息驱动处理
4、大规模的并行处理
5、手动或是有计划的重启
6、局部处理:跳过记录(如:回滚)
技术目标:
1、利用Spring编程模型:使程序员专注于业务处理,让Spring框架管理流程。
2、明确分离批处理的执行环境和应用。
3、提供核心的,共通的接口。
4、提供开箱即用(out of the box)的简单的默认的核心执行接口。
5、提供Spring框架中配置、自定义、和扩展服务。
6、所有存在的核心服务可以很容的被替换和扩展,不影响基础层。
7、提供一个简单的部署模式,利用Maven构建独立的Jar文件。
Spring Batch的结构:
这种分层结构有三个重要的组成部分:应用层、核心层、基础架构层。应用层包含所有的批处理作业,通过Spring框架管理程序员自定义的代码。核心层包含了Batch启动和控制所需要的核心类,如:JobLauncher、Job 和step等。应用层和核心层建立在基础构架层之上,基础构架层提供共通的读(ItemReader)、写(ItemWriter)、和服务(如RetryTemplate:重试模块。可以被应用层和核心层使用)。
Spring Batch 之框架流程简单介绍(二)
Spring Batch流程介绍:
上图描绘了Spring Batch的执行过程。说明如下:
每个Batch都会包含一个Job。Job就像一个容器,这个容器里装了若干Step,Batch中实际干活的也就是这些Step,至于Step干什么活,无外乎读取数据,处理数据,然后将这些数据存储起来(ItemReader用来读取数据,ItemProcessor用来处理数据,ItemWriter用来写数据) 。JobLauncher用来启动Job,JobRepository 是上述处理提供的一种持久化机制,它为JobLauncher,Job,和Step实例提供CRUD操作。
外部控制器调用JobLauncher启动一个Job,Job调用自己的Step去实现对数据的操作,Step处理完成
后,再将处理结果一步步返回给上一层,这就是Batch处理实现的一个简单流程。
Step执行过程:
从DB或是文件中取出数据的时候,read()操作每次只读取一条记录,之后将读取的这条数据传递给processor(item)处理,框架将重复做这两步操作,直到读取记录的件数达到batch配置信息中”commin-interval”设定值的时候,就会调用一次write操作。然后再重复上图的处理,直到处理完所有的数据。当这个Step的工作完成以后,或是跳到其他Step,或是结束处理。
这就是一个SpringBatch的基本工作流程。
下次,将通过“Hello World”实例,与大家共同探讨SpringBatch的具体应用和实现。
Spring Batch 之 Sample(Hello World)(三)
通过前面两篇关于Spring Batc章的介绍,大家应该已经对Spring Batch有个初步的概念了。这篇文章,将通过一个”Hello World!”实例,和大家一起探讨关于Spring Batch的一些基本配置和实现。使大家从开发的角度对Spring Batch有一个真切的体会。
说明:1,本实例使用的是spring-batch 2.1.8
2,本实例没有像前面讲的那样配置ItemReader、ItemProcessor和ItemWriter,而是之间在Step 中调用Tasklet,由Tasklet完成”Hello World!”的输出。
工程结构如下图:
JobLaunch.java类用来启动Bath,writeTasklet.java用来完成输出工作。l用来配置一些Spring信息,l配置Job信息。
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="/schema/beans"
xmlns:xsi="/2001/XMLSchema-instance" xmlns:p=" /schema/p"
xmlns:tx="/schema/tx" xmlns:aop=" /schema/aop"
xmlns:context="/schema/context"
xsi:schemaLocation="/schema/beans
/schema/beans/spring-beans-3.0.xsd
/schema/tx
/schema/tx/spring-tx-3.0.xsd
/schema/aop
/schema/aop/spring-aop-3.0.xsd
/schema/context
/schema/context/spring-context-2.5.xsd"
default-autowire="byName">
<bean id="jobLauncher"class="org.launch.support.SimpleJobLauncher"> <property name="jobRepository" ref="jobRepository"/>
</bean>
spring系列框架有哪些<bean id="jobRepository"class="org.epository.support.MapJobReposi
toryFactoryBean">
</bean>
<bean id="transactionManager"
class="org.springframework.ansaction.ResourcelessTransactionManager"/>
</beans>
jobLauncher负责batch的启动工作,jobRepository负责job的整个运行过程中的CRUD操作,transactionManager负责事务的管理操作。
<?xml version="1.0" encoding="UTF-8"?>
<bean:beans xmlns="/schema/batch"
xmlns:bean="/schema/beans" xmlns:xsi="/2001/XM LSchema-instance"
xmlns:p="/schema/p" xmlns:tx="/sc hema/tx"
xmlns:aop="/schema/aop" xmlns:context="www./schema/context"
xsi:schemaLocation="/schema/beans
/schema/beans/spring-beans-3.0.xsd
/schema/tx
/schema/tx/spring-tx-3.0.xsd
/schema/aop
/schema/aop/spring-aop-3.0.xsd
/schema/context
/schema/context/spring-context-2.5.xsd
/schema/batch
/schema/batch/spring-batch-2.1.xsd">
<bean:import resource="l"/>
<job id="helloWorldJob">
<step id="step_hello" next="step_world">
<tasklet ref="hello" transaction-manager="transactionManager"></tasklet> </step>
<step id="step_world">
<tasklet ref="world" transaction-manager="transactionManager"></tasklet> </step>
</job>
<bean:bean id="hello" class="com.wanggc.springbatch.sample.helloworld.writeTasklet"> <bean:property name="message" value="Hello "></bean:property>
</bean:bean>
<bean:bean id="world" class="com.wanggc.springbatch.sample.helloworld.writeTasklet"> <bean:property name="message" value=" World!"></bean:property>

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。