Spring Batch

痴心易碎 提交于 2020-02-27 06:55:15

Chunk

面向批的处理操作,提供了标准的read process write 三种操作。 除此外还提供了异常处理 可靠性 稳定性 异常重入能力。具体包含 事务提交间隔 跳过策略 重试策略 读事务队列 批处理完成策略

属性

  • reader 读数据BeanID
  • processor 处理数据BeanID
  • writer 写数据BeanID
  • commit-interval 提交间隔,指读多少条数据后再才交给writer处理
  • skip-limit 异常发生时,允许跳过的最大数
  • skip-policy 跳过策略BeanID
  • retry-policy 重试策略BeanID
  • retry-limit 任务执行重试的最大次数
  • cache-capacity retry-policy 缓存的大小
  • reader-transactional-queue 从一个事务性的队列读取数据
  • processor-transactional 处理数据是否在事务中
  • chunk-completion-policy 批处理完成策略

子元素

<chunk>
    <reader/>
    <processor/>
    <writer/>
    <streams/>
    <retry-policy/>
    <retryable-exception-classes/> <!--定义一组触发重试的异常-->
    <retry-listeners/>	<!--重试监听器-->
    <skip-policy/>	<!--跳过策略-->
    <skippable-exception-classes/> <!--定义一组触发跳过的异常-->
    <listeners/>	<!--监听器-->
</chunk>

提交间隔

应用场景:如果读一条数据处理后就写一条数据,这样会大量消耗系统的资源。通过commit-interval 可以指定,当处理多少条数据后再写入数据库中。

完成策略

提交间隔只是完成策略的一种实现,它不能与commit-interval同时存在。你有可能想通过时间来控制提交间隔而不是数量。如:当过10分钟后再操作写入操作。 这时可以通过chunk-completion-policy来指定,要实现CompletionPolicy

异常跳过

应用场景:当有些任务允许有少许的失败,当然失败次数要控制在一定次数以内。这时就需要使用skip-limit skip-policyretryable-exception-classes 来处理

重试

应用场景:当有些操作涉及网络,网络有可能会出现波动而导致失败,但过会又会好的,这时就需要有重试的机制。可以使用 retry-policy retry-limit cache-capacity retryable-exception-classes 来处理

读、处理事务

reader-transactional-queue 表示是否从一个事务性的队列读取数据。如果是,一但发生异常会导致事务回滚,从队列中读取的数据同样会被重新放回到队列中。一但reader-transactional-queue设置为true,processor-transactional也必须是true

拦截器

  • ChunkListener 或 @BeforeChunk @AfterChunk
  • ItemProcessListener 或 @BeforeProcess @AfterProcess @OnProcessError
  • ItemReadListener 或 @BeforeRead @AfterRead @OnReadError
  • ItemWriteListener 或 @BeforeWrite @AfterWrite @OnWriteError
  • SkipListener 或 @OnSkipInRead @OnSkipInWrite @OnSkipInProcess
  • RetryListener
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!