1 前言

欢迎访问南瓜慢说 www.pkslow.com获取更多精彩文章!

Spring相关文章:Springboot-Cloud

前面写了一篇文章《通过例子讲解Spring Batch入门,优秀的批处理框架》讲解Spring Batch入门,但要发挥它的作用,并行处理不能不了解。

2 四种模式

大多数情况下,单线程、单进程的Spring Batch已经能满足你的需求。在我们走向更复杂的特性之前,先看看简单的能不能用,Keep it Simple and Stupid

不过,当你确定要使用并行处理时,Spring Batch也提供了多种选择。整体上分为两大类:

  • (1)单进程、多线程
  • (2)多进程

细分如下:

  • (1)多线程的Step(单进程)
  • (2)并行的Steps(单进程)
  • (3)远程分块(多进程)
  • (4)远程分区(多进程)

光从名字看,很难理解它们之间的差别,我们来一一介绍吧。

2.1 多线程的Step

通过提供一个TaskExecutor来执行,而TaskExecutor是可以自定义的,我们可以提供一个基于线程池的TaskExecutor,则可以实现多线程处理。

@Bean
public TaskExecutor taskExecutor(){
return new SimpleAsyncTaskExecutor("spring_batch");
} @Bean
public Step sampleStep(TaskExecutor taskExecutor) {
return this.stepBuilderFactory.get("sampleStep")
.<String, String>chunk(10)
.reader(itemReader())
.writer(itemWriter())
.taskExecutor(taskExecutor)
.build();
}

2.2 并行Steps

这个看起来跟第一个很像,其实完全不一样。它是多个steps之间来并行处理。所以job应该是可以分解为独立的step,不是按一步一步的顺序处理,这样才可以并行执行。比如下面的例子,step1step2合并成一个flow1,而step3flow2flow1flow2之间可以并行处理。

代码如下:

@Bean
public Job job() {
return jobBuilderFactory.get("job")
.start(splitFlow())
.next(step4())
.build() //builds FlowJobBuilder instance
.build(); //builds Job instance
} @Bean
public Flow splitFlow() {
return new FlowBuilder<SimpleFlow>("splitFlow")
.split(taskExecutor())
.add(flow1(), flow2())
.build();
} @Bean
public Flow flow1() {
return new FlowBuilder<SimpleFlow>("flow1")
.start(step1())
.next(step2())
.build();
} @Bean
public Flow flow2() {
return new FlowBuilder<SimpleFlow>("flow2")
.start(step3())
.build();
} @Bean
public TaskExecutor taskExecutor(){
return new SimpleAsyncTaskExecutor("spring_batch");
}

2.3 远程分块

在这种模式下,step会被拆成多个Java进程来处理,主程序与分块执行程序之间通过中间件来通信。如下图所示:

由上图可以看出,读取只有一个进程Manager,而处理进程Worker则可以多个,所以适用于易读而难处理的场景。

2.4 远程分区

远程分区远程分块容易混淆,但其实它们是不同的。前面讲解的远程分块是一个进程读,多个进程处理;而远程分区是多个进程读,多个进程处理,多个进程写:

所以,远程分区适用于容易有IO瓶颈的系统,因为它将读与写都拆到多个worker进程中去了。远程分区可以使用中间件,如消息队列,也可以不用。它通过PartitionHandler来进行分区处理,而Partitioner则定义了如何进行分区。

3 总结

本文介绍了Spring Batch并行处理的四种模式,分别是多线程Step、并行Steps、远程分块、远程分区。前两种比较简单,给出代码例子;而后两种则复杂得多,特别是远程分区模式,把IO压力和业务处理压力都分解了,能大大提高整个流程的处理效率。后续我们再专门讲解一下远程分区吧。


欢迎关注微信公众号<南瓜慢说>,将持续为你更新...

多读书,多分享;多写作,多整理。

大量数据也不在话下,Spring Batch并行处理四种模式初探的更多相关文章

  1. 框架-SPI四种模式+通用设备驱动实现

    目录 前言 笔录草稿 SPI介绍 SPI四种模式 ** SPI 驱动框架 ** 框架 前言 SPI 介绍为搜集百度资料+个人理解 其余为原创(有误请指正) 集四种模式于一身 笔录草稿 SPI介绍 SP ...

  2. 【转】大数据批处理框架 Spring Batch全面解析

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

  3. 使用Spring Security3的四种方法概述

    使用Spring Security3的四种方法概述 那么在Spring Security3的使用中,有4种方法: 一种是全部利用配置文件,将用户.权限.资源(url)硬编码在xml文件中,已经实现过, ...

  4. 转:深入浅出spring IOC中四种依赖注入方式

    转:https://blog.csdn.net/u010800201/article/details/72674420 深入浅出spring IOC中四种依赖注入方式 PS:前三种是我转载的,第四种是 ...

  5. 普通java类加入spring容器的四种方式

    今天在自己开发的工具类中使用了spring注入的方式调用了其他类,但是发生的报错,在整理了后今天小结一下. 首先简单介绍下spring容器,spring容器是整个spring框架的核心,通常我们说的s ...

  6. 对称加密和分组加密中的四种模式(ECB、CBC、CFB、OFB)

    一. AES对称加密: AES加密 分组 二. 分组密码的填充 分组密码的填充 e.g.: PKCS#5填充方式 三. 流密码:   四. 分组密码加密中的四种模式: 3.1 ECB模式 优点: 1. ...

  7. Asp.net的sessionState四种模式配置方案

    sessionState节点的配置 web.config关于sessionState节点的配置方案,sessionState有四种模式:off,inProc,StateServer,SqlServer ...

  8. OAuth2简易实战(一)-四种模式

    1. OAuth2简易实战(一)-四种模式 1.1. 授权码授权模式(Authorization code Grant) 1.1.1. 流程图 1.1.2. 授权服务器配置 配置授权服务器中 clie ...

  9. LVS 原理(调度算法、四种模式、四层负载均衡和七层 的区别)

    参考文档:http://blog.csdn.net/ioy84737634/article/details/44916241 目录 lvs的调度算法 lvs的四种模式 四层均衡负载和七层的区别 1.l ...

随机推荐

  1. C#LeetCode刷题之#724-寻找数组的中心索引( Find Pivot Index)

    问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3742 访问. 给定一个整数类型的数组 nums,请编写一个能够返 ...

  2. next()与nextLine()的区别

    abc def ghij kl mno pqr st uvw xyz 你用next(),第一次取的是abc,第二次取的是def,第三次取的是ghij 你用nextLine(),第一次取的是abc de ...

  3. 【MySQL】记一次线上重大事故:二狗子竟然把线上数据库删了!!

    写在前面 估计二狗子这几天是大姨夫来了,心情很郁闷,情绪也很低落,工作的时候也有点心不在焉.让他发个版本,结果,一行命令下去把线上的数据库删了!你没听错:是删掉了线上的数据库!运营那边顿时炸了锅:怎么 ...

  4. Airtest操作多台云手机,进行分发,多个脚本后端调度

    一.核心重点 使用python后端框架:tornado 调度:redis队列 存手机的class_name采取头取尾曾 多台手机连接方式 connect_device(f"Android:/ ...

  5. 浅谈Docker(一)

    注:由于别人写的太好了就转来基础介绍! 转自:http://www.infoq.com/cn/articles/docker-core-technology-preview Docker是PaaS供应 ...

  6. 牛客网数据库SQL实战解析(21-30题)

    牛客网SQL刷题地址: https://www.nowcoder.com/ta/sql?page=0 牛客网数据库SQL实战解析(01-10题): https://blog.csdn.net/u010 ...

  7. C#串口通讯,复制粘贴就可用,仅仅介绍怎样最快的搭建一个串口通讯,异常拦截等等需要自己加上

    using System; using System.Collections.Generic; using System.IO.Ports; using System.Text; //串口通讯类 pu ...

  8. CF1270B Interesting Subarray 题解

    22:20下晚自习所以只打了10+min,然而这并不能成为我脑抽没一眼看出B题的借口,所以又掉回绿名了qwq.所以我还是太菜了. 题意分析 给出一个数列,要求找出一段连续的子数列满足这个子数列的最大值 ...

  9. java23种设计模式——七、桥接模式

    原文地址:https://www.cnblogs.com/chenssy/p/3317866.html 源码在我的github和gitee中获取 目录 java23种设计模式-- 一.设计模式介绍 j ...

  10. Fiddler添加显示ip和响应时间

    1. 打开Fiddler,在菜单Rules 栏里点击Customize Rules…或者使用快捷键CTRL+R打开Fiddler ScriptEditor 图 1 Customize Rules 2. ...