Spring Batch实例详解

来源:互联网 发布:淘宝零食模块怎么写 编辑:程序博客网 时间:2024/06/02 03:32

       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:重试模块。可以被应用层和核心层使用)。

 

    案例分析:

 

    excel文件:aaa.csv

id,name,age,scope1,aa,44,o2,dd,55,b3,ss,66,c

   需求:将aaa.csv文件的内容复制到bbb.csv文件中:

 

   一、Spring Batch配置文件如下: 

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:batch="http://www.springframework.org/schema/batch"       xsi:schemaLocation="http://www.springframework.org/schema/beans       http://www.springframework.org/schema/beans/spring-beans.xsd       http://www.springframework.org/schema/batch       http://www.springframework.org/schema/batch/spring-batch-2.2.xsd"       default-autowire="byName">    <bean id="jobLauncher" class="org.springframework.batch.core.launch.support.SimpleJobLauncher">        <property name="jobRepository" ref="jobRepository"/>    </bean>    <bean id="transactionManager" class="org.springframework.batch.support.transaction.ResourcelessTransactionManager"/>    <bean id="jobRepository" class="org.springframework.batch.core.repository.support.MapJobRepositoryFactoryBean">        <property name="transactionManager" ref="transactionManager"/>    </bean>    <batch:job id="job">      <batch:step id="step1">        <batch:tasklet >          <batch:chunk reader="csvItemReader" writer="csvItemWriter"  commit-interval="1">             </batch:chunk>          </batch:tasklet>        </batch:step>    </batch:job>    <bean id="csvItemReader" class="org.springframework.batch.item.file.FlatFileItemReader" scope="step">        <property name="resource" value="props/aaa.csv"/>        <property name="lineMapper" ref="dlmaper"/>    </bean>    <bean id="dlmaper" class="org.springframework.batch.item.file.mapping.DefaultLineMapper">      <property name="lineTokenizer" ref="lineTokenizer"/>      <property name="fieldSetMapper" >        <bean class="org.springframework.batch.item.file.mapping.BeanWrapperFieldSetMapper">            <property name="prototypeBeanName" value="student"/>        </bean>      </property>    </bean>    <bean id="student" class="com.jd.finance.platform.accounts.domain.vo.Student"/>    <bean id="lineTokenizer" class="org.springframework.batch.item.file.transform.DelimitedLineTokenizer" >        <property name="delimiter" value=","/>        <property name="names" >            <list>                <value>id</value>                <value>name</value>                <value>age</value>                <value>score</value>            </list>        </property>    </bean>    <bean id="csvItemWriter" class="org.springframework.batch.item.file.FlatFileItemWriter" scope="step">      <property name="resource" value="props/bbb.csv"/>      <property name="lineAggregator">        <bean class="org.springframework.batch.item.file.transform.DelimitedLineAggregator">           <property name="delimiter" value=","/>           <property name="fieldExtractor">              <bean class="org.springframework.batch.item.file.transform.BeanWrapperFieldExtractor">                  <property name="names" value="name,age,scope"/>              </bean>           </property>         </bean>        </property>    </bean></beans>

 

   二、执行Action类

  

@Controller@RequestMapping("/service")public class OperateAnalyzeServiceAction {    private static final Logger log = LoggerFactory.getLogger(OperateAnalyzeServiceAction.class);    @Autowired    private Job job;    @Autowired    private SimpleJobLauncher jobLauncher;    @RequestMapping(value = "/doExecute", method = RequestMethod.GET)    public void doExecute() {        try {                        JobExecution  result = jobLauncher.run(job, new JobParameters());             /* 处理结束,控制台打印处理结果 */            System.out.println(result.toString());        } catch (Exception e) {            e.printStackTrace();        }    }}

 

public class Student {    private  String id;    private  String name;    private String age;    private String scope;    public String getAge() {        return age;    }    public void setAge(String age) {        this.age = age;    }    public String getId() {        return id;    }    public void setId(String id) {        this.id = id;    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public String getScope() {        return scope;    }    public void setScope(String scope) {        this.scope = scope;    }}

 

 

<dependency>    <groupId>org.springframework.batch</groupId>    <artifactId>spring-batch-core</artifactId>    <version>2.2.3.RELEASE</version></dependency><dependency>    <groupId>org.springframework.batch</groupId>    <artifactId>spring-batch-infrastructure</artifactId>    <version>2.2.3.RELEASE</version></dependency><dependency>    <groupId>org.springframework.batch</groupId>    <artifactId>spring-batch-test</artifactId>    <version>2.2.3.RELEASE</version>    <scope>test</scope></dependency>

 

 

 

 

 

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 c1骑摩托车要拘留怎么办 欠钱的找不到人怎么办 治安拘留人跑了怎么办 行政拘留拘留所不收应该怎么办 在看守所被打了怎么办 取保候审超过12个月怎么办 拘留20天还没有判刑怎么办 被打了没有证据怎么办 拘留37天后没有放人怎么办 强制执行执行的财产不够怎么办 收到公安局拘留通知家属应该怎么办 对方不出谅解书怎么办 寻衅滋事没抓的 怎么办 公务员政审父母拘留过怎么办 我参与了网赌怎么办 亲人出车祸去世家属怎么办 车牌换了原保险怎么办 北京车牌夫妻变更车险怎么办 赌博拘留15天不交罚款怎么办 给人打了不赔钱怎么办 打了人对方讹钱怎么办 换车了原来的etc怎么办 换异地车牌了etc怎么办 被执行人拘留15天后不还钱怎么办 被执行人拘留后还是不还钱怎么办 摩托车套牌被交警扣了怎么办 套牌摩托车遇到交警怎么办 不知情收到小偷东西了怎么办 盗窃罪法院判定农民赔钱没钱怎么办 公安局通知家属取刑拘通知书怎么办 老公诈骗坐牢家人该怎么办 家人被拘留我该怎么办 车牌被偷了一个怎么办 车牌给人家偷了怎么办 收购了偷来的铝怎么办 员工自动离职后档案怎么办 辞职了老板不发工资怎么办 上班老板不发工资怎么办 逮捕后延长羁押期限怎么办手续 员工提出辞职公司不同意怎么办 员工提出辞职后即不来上班怎么办