SpringBatch批量处理框架

什么是SpringBatch:SpringBatch是一种轻量级的、完善的批处理框架

SpringBatch的应用场景:高效处理大量信息、定时处理大量数据、联机跑批、多机批处理

一:SpringBatch的基本流程体系:

 

 其实按照通俗来说 就是三个部分:RPW, R指的是Read意思为读取文件,P指得Processor处理文件,W指的是Writer意思为写入指定的文件中。一个批处理就是一个Step。

其中ItemReader包括:DBLargeReader(数据量过大,分段时使用)、DBReader、FileJsonReader(JSON文件处理)、FileStructReader(读取格式,用的时候比较多)

我们在使用SpringBatch中,我们要知道一个清晰的逻辑就是:在使用不同的Reader,都要选择与Reader想配套的Process

那Processor包括:DBLargeProcessor、DBProcessor、FileJsonProcessor等

Writer包括:FileStructWriter(使用较多)、NoneWriter

二:不可忽略的问题:

我们在进行批处理的时候,我们需要进行监听!!!!很多时候,我们漏掉了这个环节,会导致一系列的错误,这个在之后的文档中,会具体分析

浅谈一下监听的选择:在我们这个业务体系中,主要用到的监听就是:KBMonitorListener、KBPartitionStepListener.

监听以及监听在项目的中的配置请移步:

listener监听器 - ThinkIng_Nick - 博客园 (cnblogs.com)icon-default.png?t=M7J4https://www.cnblogs.com/wkk1993/p/4962281.html

三:如何处理单线程以及多线程批量处理

当数据量过大,一台服务器无法满足我们的需求时,这个时候,我们就需要引入多台服务器进行协同处理。即对现有的数据进行切片,引入PartitionStep,

这里我们就会遇到一个问题:当多机跑批进行任务分片时,可能会出现多机资源无法充分利用的问题:

(1)在性能方面,可能kill掉跑批慢的PartitionStep ,让跑的快的继续执行

(2)数据量方面;如果文件非常大,可以考虑把数据拆分给分布式文件存储管理系统,存放不同节点

在使用的时候,我们使用KBParition进行单机多线程,使用KBRemoteParition进行远程多线程处理

四:在使用SpringBatch我们经常会遇到问题以及解决办法

1.空指针错误:

在出现空指针错误时,大多数多是获取到的对象为空,所以只需要在获取对象时,建立一个非空判断,即可解决

2.当同时运行多个job,jobname以及JobParameters 相同时,控制台会报出: org.springframework.batch.core.repository.JobInstanceAlreadyCompleteException: A job instance already exists and is complete for parameters={startDate=20130404, endDate=20130404}.  If you want to run this job again, change the parameters:

这个错误说明当JobParameters 相同的任务只能成功运行一次 ,如果连续运行同一个job ,则会出现此异常 解决方法:在Parameters中添加:

<bean id ="runIdIncrementer" // 为数据库中主键id       class ="org.springframework.batch.core.launch.support.RunIdIncrementer" />,或者改变jobParameters 中的参数,因为JobInstance=jobname+jobParameters //JobInstance为job是实例,Job每执行一次就会有一个JobInstance

3.spring batch中自增序列问题:

SpringBatch 中有很多以 seq 结尾的表,这些表的自增依赖MySQL 的内置函数 last_insert_id(),如果使用其他数据库(比如h2, TDSQL),但是使用MySQL的驱动,有可能报错: at org.springframework.jdbc.support.incrementer.MySQLMaxValueIncrementer.getNextKey() 解决方法:利用覆盖整个类进行操作或者修改驱动,找到合适的驱动进行处理

五:如何搭建SpingBatch

1.在工程中引入依赖:

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-batch</artifactId>
</dependency>
<dependency>
  <groupId>com.h2database</groupId>
  <artifactId>h2</artifactId>
  <scope>runtime</scope>
</dependency>

2.编写入口:

@SpringBootApplication
@EnableBatchProcessing
public class BatchJobMain {
    public static void main(String[] args) {
        SpringApplication.run(BatchJobMain.class, args);
    }
}
也很简单,只是在Springboot的基础上添加注解@EnableBatchProcessing。

更多搭建内容请移步:批处理框架之SpringBatch简介_jackssybin的博客-CSDN博客_springbatchicon-default.png?t=M7J4https://blog.csdn.net/jackssybin/article/details/124957443以上就是本人对SpingBatch一些简单的了解,后续在项目中使用到批量框架还会进行记录。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值