文档章节

Spring Batch功能轮廓

伟丶
 伟丶
发布于 2017/06/01 09:52
字数 675
阅读 212
收藏 0

spring batch 版本:3.0.7  环境:JDK1.6+

spring Batch 与 quartz 区别:

  spring Batch:任务配置调度平台,通过手动调度。基本所有功能是通过Spring xml配置实现,API待调研。配置比较复杂。但实现功能多。

  quartz:任务自动调度平台,通过cron表达式控制调度时间。

两种东西的面向对象不同,可结合使用,实现定时批量调度

 

 spring Batch现有支持:

    1、多数据库

       数据库语句存在spring-batch-core.jar内

    2、任务可按定义step顺序执行

<job  id = “footballJob” > 
    <step  id = “playerload”           parent = “s1”  next = “gameLoad” /> 
    <step  id = “gameLoad”             parent = “s2”  next = “playerSummarization” /> 
    <step  id = “playerSummarization”  parent = “s3” /> 
</ job>

    3、任务执行时,可根据当前任务执行状态判断继续执行哪个任务

<job id="job">
    <step id="stepA" parent="s1">
        <next on="*" to="stepB" />
        <next on="FAILED" to="stepC" />
    </step>
    <step id="stepB" parent="s2" next="stepC" />
    <step id="stepC" parent="s3" />
</job>

    4、自定义事物管理,与spring相同

<job id="sampleJob" job-repository="jobRepository">
    <step id="step1">
        <tasklet transaction-manager="transactionManager">
            <chunk reader="itemReader" writer="itemWriter" commit-interval="10"/>

        </tasklet>
    </step>
</job>

    事物传播机制定义 Spring: 5.1.8 Transaction Attributes

<step  id = “step1” > 
    <tasklet> 
        <chunk  reader = “itemReader”  writer = “itemWriter”  commit-interval = “2” /> 
        <transaction-attributes  isolation = “DEFAULT” 
                                propagation = “REQUIRED” 
                                timeout = “30 “ /> 
    </ tasklet> 
</ step>

5、当任务状态改变时(开始、完成等),可配置执行不同监听

<step id="step1">
    <tasklet>
        <chunk reader="reader" writer="writer" commit-interval="10"/>
        <listeners>
            <listener ref="chunkListener"/>
        </listeners>
    </tasklet>
</step>

    监听可配置与父任务合并种类   Spring:4.1.3 Inheriting from a Parent Job

<job  id = “baseJob”  abstract = “true” > 
    <listeners> 
        <listener  ref = “listenerOne” /> 
    <listeners> 
</ job>

<job  id = “  job1 ” parent = “baseJob” > 
    <step  id = “step1”  parent = “standaloneStep” />

    <listeners  merge = “true” > 
        <listener  ref = “listenerTwo” /> 
    <listeners> 
</ job>

6、任务重试次数和重试时每个step是否运行 Spring:5.1.4 Configuring a Step for Restart

<job id="footballJob" restartable="true">
    <step id="playerload" next="gameLoad">
        <tasklet>
            <chunk reader="playerFileItemReader" writer="playerWriter"
                   commit-interval="10" />
        </tasklet>
    </step>
    <step id="gameLoad" next="playerSummarization">
        <tasklet allow-start-if-complete="true">
            <chunk reader="gameFileItemReader" writer="gameWriter"
                   commit-interval="10"/>
        </tasklet>
    </step>
    <step id="playerSummarization">
        <tasklet start-limit="3">
            <chunk reader="playerSummarizationSource" writer="summaryWriter"
                   commit-interval="10"/>
        </tasklet>
    </step>
</job>

7、自定义异常过滤,可配置发生各种异常时是否回滚和忽视某些异常 Spring :5.1.7 Controlling Rollback

    异常不回滚:

<step id="step1">
   <tasklet>
      <chunk reader="itemReader" writer="itemWriter" commit-interval="2"/>
      <no-rollback-exception-classes>
         <include class="org.springframework.batch.item.validator.ValidationException"/>
      </no-rollback-exception-classes>
   </tasklet>
</step>

    跳过异常:

<step  id = “step1” > 
    <tasklet> 
        <chunk  reader = “flatFileItemReader”  writer = “itemWriter” 
               commit-interval = “10”  skip-limit =“10” >
             <skippable-exception-classes> 
                <include class = java.lang.Exception“/> 
                <exclude class =”java.io.FileNotFoundException“/> 
            </ skippable-exception-classes>
         </ chunk> 
    </ tasklet> 
</ step>

    重试异常:

<step  id = “step1” > 
   <tasklet> 
      <chunk  reader = “itemReader”  writer = “itemWriter” 
             commit-interval = “2”  retry-limit =“3” >
          <retryable-exception-classes> 
            <include class = org.springframework.dao.DeadlockLoserDataAccessException“/> 
         </ retryable-exception-classes>
       </ chunk> 
   </ tasklet> 
</ step>

8、step并流执行 Spring : 5.3.5 Split Flows

<split id="split1" next="step4">
    <flow>
        <step id="step1" parent="s1" next="step2"/>
        <step id="step2" parent="s2"/>
    </flow>
    <flow>
        <step id="step3" parent="s3"/>
    </flow>
</split>
<step id="step4" parent="s4"/>

    引用写法

<job id="job">
    <flow id="job1.flow1" parent="flow1" next="step3"/>
    <step id="step3" parent="s3"/>
</job>

<flow id="flow1">
    <step id="step1" parent="s1" next="step2"/>
    <step id="step2" parent="s2"/>
</flow>

9、内容值动态绑定,只限于bean的属性

<bean id="flatFileItemReader" scope="step"
      class="org.springframework.batch.item.file.FlatFileItemReader">
    <property name="resource" value="#{jobParameters['input.file.name']}" />
</bean>

 

 

© 著作权归作者所有

共有 人打赏支持
伟丶
粉丝 1
博文 7
码字总数 2359
作品 0
合肥
程序员
私信 提问
Spring Batch 4.0.0 正式发布,批处理框架

Spring Batch 4.0.0 已发布,Spring Batch 是一个轻量级的,完全面向 Spring 的批处理框架,可以应用于企业级大量的数据处理系统。Spring Batch 以 POJO 和 Spring 框架为基础,使开发者更容...

王练
2017/12/05
3.6K
5
Spring Batch 4.0.0.M2 发布,批处理框架

Spring Batch 4.0.0.M2 发布了,这是 Spring Batch 4.0 系列的第二个里程碑版本。本次更新包括以下内容: 依赖更新 继续改进 Java 配置 详细内容请参阅发布主页 Spring Batch 是一个轻量级的...

局长
2017/05/16
1K
1
Spring Batch 3.0.9 和 4.0.1 发布,常规维护版本

Spring Batch 3.0.9 和 4.0.1 已发布,可从 Maven Central, Github 和 Pivotal 下载仓库获取。 这两个维护版本修复了一些错误、增强功能和更新文档。有关变更的完整列表,请参阅 3.0.9 和 4....

局长
03/08
1K
2
Spring Batch管理平台

Spring Batch框架出现,降低了开发人员自行编写批处理框架的难度,同时,也让开发人员更加集中于业务逻辑的处理。但是,Spring Batch框架的掌握并非易事,主要集中在:1、技术资料太少;2、S...

我可梦
2016/04/11
2
0
Spring Batch 4.1.0.RC1,用于编写批处理应用的框架

Spring Batch 4.1.0.RC1 已发布,可从 Maven Central, Github 和 Pivotal 下载仓库获取。Spring Batch 是一个使用 Spring 和 Java 编写离线和批处理应用程序的框架。 更新内容 在这个版本中,...

局长
09/27
1K
0

没有更多内容

加载失败,请刷新页面

加载更多

在PC上测试移动端网站和模拟手机浏览器的5大方法

总结很全面,保存下来以备不时之需。原文地址:https://www.cnblogs.com/coolfeng/p/4708942.html

kitty1116
31分钟前
3
0
分布式Session共享解决方案

分布式Session一致性? 说白了就是服务器集群Session共享的问题 Session的作用? Session 是客户端与服务器通讯会话跟踪技术,服务器与客户端保持整个通讯的会话基本信息。 客户端在第一次访...

Java干货分享
36分钟前
5
0
开源软件和开源模式面临的生存危机

导读 开源模式可能正面临一场危机。越来越多的开源软件和平台被大型云计算服务商融入自家的云服务体系,并以此获利颇丰,但并不支付费用,也没有对开源社区做出相应的回馈。而实际上,大部分...

问题终结者
38分钟前
3
0
让看不见的AI算法,助你拿下看得见的广阔市场

人工智能技术的飞速发展给各行各业都带来了深远的影响,AI已被视为企业提升运营效能、应对市场竞争的必经之路。然而对于一些企业而言,让AI真正实现落地和应用,并且创造价值,仍是一件需要努...

个推
43分钟前
2
0
用SAN还是NAS?我来告诉你

存储区域网络(SAN)是以一种结构连接的存储,通常通过交换机连接,使许多不同的服务器能够轻松访问存储设备。从服务器应用程序和操作系统的角度来看,访问SAN中的数据存储或直接连接的存储之间...

linux-tao
46分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部