首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

批处理框架 Spring Batch,数据迁移量过大如何保证内存?

概述 本篇博客是记录使用spring batch做数据迁移时时遇到的一个关键问题:数据迁移量大时如何保证内存。...当我们在使用spring batch时,我们必须配置三个东西: reader,processor,和writer。...在学习了spring batch的知识之后我们应该很清楚的一点是,每一个spring batch的step都包含如下的部分: 即读数据,处理数据,写数据。...若我们的数据量不大,如只有几十万条,那我们无疑不会面临内存问题,即便一次将所有数据加载到内存当中,占的内存也不会非常多,且spring batch数据迁移的速度非常之快,几十万条的数据往往是几十秒的时间就可以迁移完成...JdbcPagingItemReader JdbcPagingItemReader的作用和它的名字一样,它可以分页读取数据,但是使用起来相比于JdbcCursorItemReader更加复杂,示例代码如下

18710

Spring Batch(6)——数据库批数据读写

为了解决这个问题Spring Batch提供了2套数据读取方案: 基于游标读取数据 基于分页读取数据 游标读取数据 对于有经验大数据工程师而言数据库游标的操作应该是非常熟悉的,因为这是从数据库读取数据流标准方法...ResultSet一直都会指向结果集中的某一行数据,使用next方法可以让游标跳转到下一行数据。Spring Batch同样使用这个特性来控制数据的读取: 在初始化时打开游标。.../chkui/spring-batch-sample 执行JdbcCursorItemReader的代码在org.chenkui.spring.batch.sample.items.JdbcReader...执行JdbcPagingItemReader的代码在org.chenkui.spring.batch.sample.items.pageReader。...案例的运行代码在org.chenkui.spring.batch.sample.database.complex包中,使用了2个Step来完成任务,一个将数据读取到数据库,一个将数据进行过滤,然后再写入到文件

4.5K81
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    批处理框架 Spring Batch 这么强,你会用吗?

    Spring Batch构建了人们期望的Spring Framework特性(生产力,基于POJO的开发方法和一般易用性),同时使开发人员可以在必要时轻松访问和利用更高级的企业服务。...大批量批处理作业可以高度可扩展的方式利用该框架来处理大量信息。 Spring Batch架构介绍 一个典型的批处理应用程序大致如下: 从数据库,文件或队列中读取大量记录。 以某种方式处理数据。...原来 Elasticsearch 还可以这么理解 在spring batch中一个job可以定义很多的步骤step,在每一个step里面可以定义其专属的ItemReader用于读取数据,ItemProcesseor...特别是,需要寻找以下四个常见缺陷: 当数据可以被读取一次并缓存或保存在工作存储中时,读取每个事务的数据。 重新读取先前在同一事务中读取数据的事务的数据。 导致不必要的表或索引扫描。...spring batch的job会在项目启动时自动run,如果我们不想让他在启动时run的话,可以在application.properties中添加如下属性: spring.batch.job.enabled

    94630

    批处理框架 Spring Batch 这么强,你会用吗?

    Spring Batch构建了人们期望的Spring Framework特性(生产力,基于POJO的开发方法和一般易用性),同时使开发人员可以在必要时轻松访问和利用更高级的企业服务。...大批量批处理作业可以高度可扩展的方式利用该框架来处理大量信息。 Spring Batch架构介绍 一个典型的批处理应用程序大致如下: 从数据库,文件或队列中读取大量记录。 以某种方式处理数据。...在spring batch中一个job可以定义很多的步骤step,在每一个step里面可以定义其专属的ItemReader用于读取数据,ItemProcesseor用于处理数据,ItemWriter用于写数据...特别是,需要寻找以下四个常见缺陷: 当数据可以被读取一次并缓存或保存在工作存储中时,读取每个事务的数据。 重新读取先前在同一事务中读取数据的事务的数据。 导致不必要的表或索引扫描。...spring batch的job会在项目启动时自动run,如果我们不想让他在启动时run的话,可以在application.properties中添加如下属性: spring.batch.job.enabled

    1.4K30

    Spring Batch 批处理(4) - ItemReader

    ,我们都需要从数据库中读取数据,并且进行分页读取,在spring-batch中为我们提供了JDBCPagingItemReader这个类进行数据库数据读取 2.在数据库中建立user表 数据库数据如下...reader.setRowMapper((rs,rowNum)->{ // 讲读取的记录转化为对象 return Customer.builder().id(rs.getLong... 在项目中的resources中放入csv文件,以读取customer.csv为例 文件内容 !... 1.使用StaxEventItemReader读取xml数据 2.例:在项目中加入一个customer.xml文件,以读取此文件为例 **待读取的xml文件** !... 1.在一个给定的目录下一次读取多个文件时非常常见的 2.我们可以使用MultiResourceItemReader来注册一个input file并且设置代理的ItemReader去处理每一个源文件

    1.1K10

    Spring Batch批处理框架,真心强啊!!

    大批量批处理作业可以高度可扩展的方式利用该框架来处理大量信息。 Spring Batch 架构 一个典型的批处理应用程序大致如下: 从数据库,文件或队列中读取大量记录。 以某种方式处理数据。...其对应的示意图如下: Spring Batch 的一个总体的架构如下: 在 Spring Batch 中一个 job 可以定义很多的步骤 step,在每一个 step 里面可以定义其专属的 ItemReader...| 什么是 Item Processor ItemProcessor 对项目的业务逻辑处理的一个抽象,当 ItemReader 读取到一条记录之后,ItemWriter 还未写入这条记录之前,I 我们可以借助...特别是,需要寻找以下四个常见缺陷:当数据可以被读取一次并缓存或保存在工作存储中时,读取每个事务的数据;重新读取先前在同一事务中读取数据的事务的数据;导致不必要的表或索引扫描;未在 SQL 语句的 WHERE...Spring Batch 的 job 会在项目启动时自动 run,如果我们不想让他在启动时 run 的话,可以在 application.properties 中添加如下属性: spring.batch.job.enabled

    1.1K10

    批处理框架 Spring Batch 这么强,你会用吗?

    大批量批处理作业可以高度可扩展的方式利用该框架来处理大量信息。 Spring Batch 架构介绍 一个典型的批处理应用程序大致如下: 从数据库,文件或队列中读取大量记录。 以某种方式处理数据。...其对应的示意图如下: 批处理应用程序流程图 spring batch 的一个总体的架构如下: 在 spring batch 中一个 job 可以定义很多的步骤 step,在每一个 step...什么是 Item Processor ItemProcessor 对项目的业务逻辑处理的一个抽象, 当 ItemReader 读取到一条记录之后,ItemWriter 还未写入这条记录之前,我们可以借助...特别是,需要寻找以下四个常见缺陷: 当数据可以被读取一次并缓存或保存在工作存储中时,读取每个事务的数据。 重新读取先前在同一事务中读取数据的事务的数据。 导致不必要的表或索引扫描。...spring batch 的 job 会在项目启动时自动 run,如果我们不想让他在启动时run 的话,可以在 application.properties 中添加如下属性: spring.batch.job.enabled

    73930

    批处理框架 Spring Batch 这么强,你会用吗?

    大批量批处理作业可以高度可扩展的方式利用该框架来处理大量信息。 Spring Batch架构介绍 一个典型的批处理应用程序大致如下: 从数据库,文件或队列中读取大量记录。 以某种方式处理数据。...Figure 2.1: Batch Stereotypes 在spring batch中一个job可以定义很多的步骤step,在每一个step里面可以定义其专属的ItemReader用于读取数据,ItemProcesseor...什么是Item Processor ItemProcessor对项目的业务逻辑处理的一个抽象, 当ItemReader读取到一条记录之后,ItemWriter还未写入这条记录之前,I我们可以借助temProcessor...特别是,需要寻找以下四个常见缺陷: 当数据可以被读取一次并缓存或保存在工作存储中时,读取每个事务的数据。 重新读取先前在同一事务中读取数据的事务的数据。 导致不必要的表或索引扫描。...spring batch的job会在项目启动时自动run,如果我们不想让他在启动时run的话,可以在application.properties中添加如下属性: spring.batch.job.enabled

    3.4K20

    批处理框架spring batch基础知识介绍「建议收藏」

    大批量批处理作业可以高度可扩展的方式利用该框架来处理大量信息。 Spring Batch架构介绍 一个典型的批处理应用程序大致如下: 从数据库,文件或队列中读取大量记录。 以某种方式处理数据。...其对应的示意图如下: spring batch的一个总体的架构如下: 在spring batch中一个job可以定义很多的步骤step,在每一个step里面可以定义其专属的ItemReader用于读取数据...什么是Item Processor ItemProcessor对项目的业务逻辑处理的一个抽象, 当ItemReader读取到一条记录之后,ItemWriter还未写入这条记录之前,I我们可以借助temProcessor...特别是,需要寻找以下四个常见缺陷: 当数据可以被读取一次并缓存或保存在工作存储中时,读取每个事务的数据。 重新读取先前在同一事务中读取数据的事务的数据。...spring batch的job会在项目启动时自动run,如果我们不想让他在启动时run的话,可以在application.properties中添加如下属性: spring.batch.job.enabled

    1.2K30

    批处理框架 Spring Batch 这么强,你会用吗?

    Spring Batch构建了人们期望的Spring Framework特性(生产力,基于POJO的开发方法和一般易用性),同时使开发人员可以在必要时轻松访问和利用更高级的企业服务。...大批量批处理作业可以高度可扩展的方式利用该框架来处理大量信息。 Spring Batch架构介绍 一个典型的批处理应用程序大致如下: 从数据库,文件或队列中读取大量记录。 以某种方式处理数据。...在spring batch中一个job可以定义很多的步骤step,在每一个step里面可以定义其专属的ItemReader用于读取数据,ItemProcesseor用于处理数据,ItemWriter用于写数据...特别是,需要寻找以下四个常见缺陷: 当数据可以被读取一次并缓存或保存在工作存储中时,读取每个事务的数据。 重新读取先前在同一事务中读取数据的事务的数据。 导致不必要的表或索引扫描。...spring batch的job会在项目启动时自动run,如果我们不想让他在启动时run的话,可以在application.properties中添加如下属性: spring.batch.job.enabled

    92510

    Spring Batch实战(二)

    1、SpringBatch支持三种类型的数据源来进行批处理: 数据库类型 文件类型 消息类型 2、概念术语 (1)Job 在Spring Batch中,Job只是Step实例的容器。...作业配置包含: Job的名称 Step实例的定义和顺序 任务是否可以重新启动 @Bean public Job footballJob() { return this.jobBuilderFactory.get...因此,它们之间的联系可以定义为:JobInstance = Job +标识JobParameters。...(5)Step 关于Step,你可以这么理解,一个任务就是一个Job,但是你的任务是由许多步骤组成的,在每个步骤里面会做一些逻辑处理,比如从数据源读取数据、对读取的数据进行清洗转换、最后将干净的数据写入目标数据源...,这里的步骤就是Step,所以一个Job可以由一个Step或者多个Step组成。

    96320

    Spring Batch 批处理框架,真心强啊!!

    Spring Batch构建了人们期望的Spring Framework特性(生产力,基于POJO的开发方法和一般易用性),同时使开发人员可以在必要时轻松访问和利用更高级的企业服务。...其对应的示意图如下: spring batch的一个总体的架构如下: Figure 2.1: Batch Stereotypes 在spring batch中一个job可以定义很多的步骤step,在每一个...什么是Item Processor ItemProcessor对项目的业务逻辑处理的一个抽象, 当ItemReader读取到一条记录之后,ItemWriter还未写入这条记录之前,I我们可以借助temProcessor...特别是,需要寻找以下四个常见缺陷: 当数据可以被读取一次并缓存或保存在工作存储中时,读取每个事务的数据。 重新读取先前在同一事务中读取数据的事务的数据。 导致不必要的表或索引扫描。...spring batch的job会在项目启动时自动run,如果我们不想让他在启动时run的话,可以在application.properties中添加如下属性: spring.batch.job.enabled

    1.4K10

    springbatch+mysql

    =classpath:/org/springframework/batch/core/schema-mysql.sql #下免的配置是再初始化的时候会执行上面的schema-mysql.sql中的表 spring.batch.initialize-schema...一个job可以嵌套再另一个job中,被嵌套的Job称为子Job,外部Job成为父Job,子Job不能单独执行,需要由父Job来启动 案例:创建两个job,作为子Job,再创建一个job作为父Job...spring.batch.job.names=parentJobs 2.7监听器的使用 这里是监听的jobi其他的step,trunk,read,process,write都可以监听 两种配置监听的方式一种是实现接口还有一种是使用注解...2);//每次读两条 //把读取的记录转换成User对象 reader.setRowMapper(new RowMapper() {...provider.setSortKeys(sort); reader.setQueryProvider(provider); return reader; } } 写读取出来的数据

    65130

    SpringBatch文档

    ,可以看做是程序的入口。...JobRepository是存储数据的地方,可以看做是一个数据库的接口,在任务执行的时候需要通过它来记录任务状态等等信息。...另外,Spring Batch还非常贴心的提供了让JobParameters中的部分参数不参与JobInstance区分的功能。...JobExecution记录了一个JobInstance在一次运行时的发生的所有事情,因此,一个JobExecution需要包含很多的属性,并且需要持久化,这样才能很好的支撑Restart等Spring...说穿了,该领域概念就是一个容器,该容器由Batch框架控制,框架会对该容器持久化,开发人员可以使用该容器保存一些数据,以支持在整个BatchJob或者整个Step中共享这些数据 第二章 作业流 job

    5.4K20

    Spring batch教程 之 配置Step「建议收藏」

    所有的批处理都可以描述为最简单的形式: 读取大量的数据, 执行某种类型的计算/转换, 以及写出执行结果.Spring Batch 提供了三个主要接口来辅助执行大量的读取与写出: ItemReader,...在 Spring Batch 框架中 FlatFileItemReader 类负责读取平面文件, 该类提供了用于读取和解析平面文件的基本功能。...让我们仔细看看在Spring Batch中 XML输入和输出是如何运行的。 首先,有一些不同于文件读取和写入的概念,但在Spring Batch XML处理中是很常见的。...然而,在批处理的情况下, 是没有办法知道到底是哪一项引起的问题, 在错误发生时整个缓冲区都将被写出。...这样做可以让跳过 items 变得可靠, 而Spring Batch 在错误发生后会在内部关注适当粒度的ItemWriter调用。

    4.1K40

    为获取导入百分比,使用easyexcel获取导入excel表总行数

    背景 分批读取大量数据的excel文件,每次读取1000行数据,然后插入数据库,并且去执行一个方法,执行完毕后更新此行数据的状态。需要获取已更新数据的占比,即计算百分比。...因为是分批读取的,我们不可以直接用已更新状态数量/数据库中总数。因为可能一次读取的1000行数据更新状态很快,直接1000/1000 * 100=100%了。...方法 使用easyexcel获取总行数,记录一下, 在创建监听器时,重写invoke方法时,使用下面代码获取总行数(含表头): public void invoke(DemoData data, AnalysisContext...(每个excel都会记录一个总条数,但是这个总条数由于各种空行等原因,不一定正确),无法精确获取,要精确获取的自己在监听器里面一条条统计 监听器举例: // 有个很重要的点 DemoDataListener...不能被spring管理,要每次读取excel都要new,然后里面用到spring可以构造方法传进去 @Slf4j public class DemoDataListener implements AnalysisEventListener

    1.1K10

    SpringBoot~SpringBatch 使用

    什么是Spring Batch Spring Batch 是一个轻量级的、完善的批处理框架,旨在帮助企业建立健壮、高效的批处理应用。...Spring Batch是Spring的一个子项目,使用Java语言并基于Spring框架为基础开发,使的已经使用 Spring 框架的开发者或者企业更容易访问和利用企业服务。...总之,通过 Spring Batch 能够支持简单的、复杂的和大数据量的批处理作业。...Spring Batch 使用 我们首先配置Spring Batch 在Spring Boot 中的使用,数据库用的是mysql,pom文件如下,因为Spring Boot 中的Spring Batch...= #设置SpringBatch的数据库表的前缀 项目汇总 从 项目中我们可以看到 总的步骤就是 首先读取我们需要实现的文件进行解析,然后转换成需要的实体类并且绑定到reader中,二 实现我们需要的writer

    99730

    Spring Batch分析(一)

    今天来分析一个之前demo中用到的类JdbcPagingItemReader 1、JdbcPagingItemReader类的继承层次: 可以看到,该类的顶层是ItemReader接口和ItemStream...2、JdbcPagingItemReader的作用是什么呢? 用于使用JDBC以分页方式读取数据库记录。 它执行由PagingQueryProvider构建的SQL来检索请求的数据。...在重新启动时,它将使用最后一个排序键值来定位要读取的第一页。 重要的是对排序键具有唯一的键约束,以确保在两次执行之间不会丢失任何数据。 分页的性能取决于可用于限制返回的行数的数据库特定功能。...如果你数据源有数据库、消息类、文件类、那么你可以选择SpringBatch,最好建议是每一个reader读取单表数据,然后在processor中进行多个结果集的处理,最后做一个目标数据源数据的insert...如果是database类型,希望你可以在SpringBatch使用Reader读取数据的时候可以提高性能,必须索引之类,不要全表扫描之类等等 当然对于数据的抽取、清洗和转换你业可以考虑其他的技术方案、比如

    1.8K20

    Java一分钟之-Spring Batch:批量处理框架

    在企业级应用开发中,批量数据处理是一项常见且关键的任务,它涉及到大规模数据的导入、导出、转换等操作。...Spring Batch,作为Spring家族的一员,专为此类需求设计,提供了一套强大且灵活的批处理框架。...Spring Batch简介 Spring Batch旨在简化批量处理任务的开发,它通过定义清晰的分层架构,支持任务的步骤化、事务管理和重试机制。...避免策略:合理设置chunkSize,控制每次提交的记录数量,平衡性能与事务安全性。 3. 忽视异常处理 问题:未充分考虑异常处理逻辑,导致作业在遇到错误时直接失败,无法优雅恢复。...如何开始 添加依赖 在Maven项目中加入Spring Batch依赖: xml org.springframework.boot

    33010
    领券