Spring Batch(三) Job Launcher、ItemReader、ItemProcessor、ItemWriter各个实现类和用途
内容来自《Spring Batch 批处理框架》,作者:刘相。
1.JobLauncher
JobLauncher(作业调度器)是SpringBatch框架提供的运行Job的能力。用过给定的JobName和JobParameters,可以通过JobLauncher执行Job。通过JobLauncher可以在Java程序中调用批处理任务,也可以在通过命令或者其他的框架(如定时调度框架Quartz)中调用批处理任务。
JobLauncher接口:
public interface JobLauncher {
public JobExecution run(Job job, JobParameters jobParameters) throws JobExecutionAlreadyRunningException,
JobRestartException, JobInstanceAlreadyCompleteException, JobParametersInvalidException;
}
SpringBatch提供了JobLauncher的简单的实现了类:SimpleJobLauncher。
public class SimpleJobLauncher implements JobLauncher, InitializingBean { protected static final Log logger = LogFactory.getLog(SimpleJobLauncher.class); private JobRepository jobRepository; private TaskExecutor taskExecutor;
@Override
public JobExecution run(final Job job, final JobParameters jobParameters)
throws JobExecutionAlreadyRunningException, JobRestartException, JobInstanceAlreadyCompleteException,
JobParametersInvalidException {
//逻辑处理
}
public void setJobRepository(JobRepository jobRepository) {
this.jobRepository = jobRepository;
} public void setTaskExecutor(TaskExecutor taskExecutor) {
this.taskExecutor = taskExecutor;
} @Override
public void afterPropertiesSet() throws Exception {
//逻辑处理
}
}
2.ItemReader
ItemReader是Step中对资源的读处理,SpringBatch框架提供了多种读的实现类共我们使用。
IteamReader接口:
public interface ItemReader<T> {
T read() throws Exception, UnexpectedInputException, ParseException, NonTransientResourceException;
}
其实现类和介绍:
ItemReader | 说明 |
ListItemReader | 读取List类型数据,只能读取一次 |
ItemReaderAdapter | ItemReader适配器,可以服用现有的读操作 |
FlatFileItemReader | 读Flat类型文件 |
StaxEventItemReader | 读XML类型的文件 |
JdbcCursorItemReader | 基于JDBC游标方式读取数据库 |
HibernateCursorItemReader | 基于Hibernate游标方式读取数据库 |
StoredProcedureItemReader | 基于存储过程读取数据库 |
IbatisPagingItemReader | 基于Ibatis分页读取数据库 |
JpaPagingItemReader | 基于Jpa方式分页读取数据库 |
JdbcPagingItemReader | 基于JDBC方式分页读取数据库 |
HibernatePagingItemReader | 基于Hibernate方式分页读取数据库 |
JmsItemReader | 读取JMS队列 |
IteratorItemReader | 迭代方式读组件 |
MultiResourceItemReader | 多文件读组件 |
MongoItemReader | 基于分布式文件存储的数据库MongoDB读组件 |
Neo4jItemReader | 面向网络的数据库Neo4j读组件 |
ResourcesItemReader | 基于批量资源的读组件,每次读取返回资源对象 |
AmqpItemReader | 读取AMQP队列组件 |
RepositoryItemReader | 基于SpringData的读组件 |
3.ItemProcessor
ItemProcessor表示对读取的数据进行处理,开发者可以实现自己的业务逻辑操作来对数据处理。
ItemProcessor接口:
public interface ItemProcessor<I, O> {
O process(I item) throws Exception;
}
在process()方法中,参数item是ItemReader读取到的数据,返回O是交给ItemWriter写的数据。在process方法中可以对读取到的数据进行处理,如果返回值是null,则表示忽略这次的数据,跳过。
实现组件介绍:
SpringBatch框架提供的ItemProcessor组件
ItemProcessor | 说明 |
CompositeItemProcessor | 组合处理器,可以封装多个业务处理服务 |
ItemProcessorAdapter | ItemProcessor适配器,可以服用现有的业务处理服务 |
PassThroughItemProcessor | 不做任何业务处理,直接返回读到的数据 |
ValidatingItemProcessor | 数据校验处理器,支持对数据的校验,如果校验不通过可以进行过滤掉或者通过slip的方式跳过对记录的处理 |
4.ItemWriter
ItemWriter是Step中对资源的写处理,SpringBatch也提供了许多类型的写实现。
public interface ItemWriter<T> {
void write(List<? extends T> items) throws Exception; }
ItemWriter | 说明 |
FlatFileItemWriter | 写Flat类型文件 |
MultiResourceItemWriter | 多文件写组件 |
StaxEventItemWriter | 写XML类型文件 |
AmqpItemWriter | 写AMQP类型消息 |
ClassifierCompositeItemWriter | 根据Classifire路由不通的Item到特定的ItemWriter处理 |
HibernateItemWriter | 基于Hibernate方式写数据库 |
IbatisBtachItemWriter | 基于Ibatis方式写数据库 |
ItemWriterAdapter | ItemWriter适配器,可以服用现有的服务 |
JdbcBatchItemWriter | 基于JDBC方式写数据库 |
JmsItemWriter | 写JMS队列 |
JpaItemWriter | 基于Jpa方式写数据库 |
GenfireItemWriter | 基于分布式数据库Genfire的写组件 |
SpELMappingGenfireItemWriter | 基于Spring表达式语言写分布式数据库Genfire的组件 |
MimeMessageItemWriter | 发送邮件的写组件 |
MongoItemWriter | 基于分布式文件存储的数据库MongoDB写组件 |
Neo4jItemWriter | 面向网络的数据库Neo4j的写组件 |
PropertyExtractingDelegatingItemWriter | 属性抽取代理写组件。通过调用给定的SpringBean方法执行写入,参数由Item中指定的属性字段获取作为参数 |
RepositoryItemWriter | 基于SpringData的写组件 |
SimpleMailMessageItemWriter | 发送邮件的写组件 |
CompositeItemWriter | 条目写的组合模式,支持组装多个ItemWriter |
Spring Batch(三) Job Launcher、ItemReader、ItemProcessor、ItemWriter各个实现类和用途的更多相关文章
- spring batch(一):基础部分
spring batch(一):基础部分 博客分类: Spring java spring batch 官网: http://www.springsource.org/spring-batch 下 ...
- Spring Batch学习笔记三:JobRepository
此系列博客皆为学习Spring Batch时的一些笔记: Spring Batch Job在运行时有很多元数据,这些元数据一般会被保存在内存或者数据库中,由于Spring Batch在默认配置是使用H ...
- Spring Batch 批处理框架
<Spring Batch 批处理框架>基本信息作者: 刘相 出版社:电子工业出版社ISBN:9787121252419上架时间:2015-1-24出版日期:2015 年2月开本:16开页 ...
- 图书简介:Spring Batch批处理框架
大数据时代批处理利器,国内首度原创解析Spring Batch框架. 内容简介: <Spring Batch 批处理框架>全面.系统地介绍了批处理框架Spring Batch,通过详尽的实 ...
- Spring Batch 专题
如今微服务架构讨论的如火如荼.但在企业架构里除了大量的OLTP交易外,还存在海量的批处理交易.在诸如银行的金融机构中,每天有3-4万笔的批处理作业需要处理.针对OLTP,业界有大量的开源框架.优秀的架 ...
- spring batch批量处理框架
spring batch精选,一文吃透spring batch批量处理框架 前言碎语 批处理是企业级业务系统不可或缺的一部分,spring batch是一个轻量级的综合性批处理框架,可用于开发企业信息 ...
- Spring batch学习 详细配置解读(3)
第一篇讲到普通job 配置 那么spring batch 给我们提供了丰富的配置,包括定时任务,校验,复合监听器,父类,重启机制等. 下面看一个动态设置读取文件的配置 1.动态文件读取 <?x ...
- 【转】大数据批处理框架 Spring Batch全面解析
如今微服务架构讨论的如火如荼.但在企业架构里除了大量的OLTP交易外,还存在海量的批处理交易.在诸如银行的金融机构中,每天有3-4万笔的批处理作业需要处理.针对OLTP,业界有大量的开源框架.优秀的架 ...
- spring batch的使用和定时器Quart的使用
Spring Batch是一个基于Spring的企业级批处理框架,它通过配合定时器Quartz来轻易实现大批量的数据读取或插入,并且全程自动化,无需人员管理. 在使用spring batch之前,得对 ...
随机推荐
- SQL入门(1): 创建/查询/更新/连接/视图/SSMS简介
本文介绍SQL的基本查询语句 (1) select... from * 表示全部, 选择的东西还可以进行简单的运算, 可以列别名 select * from student; -sage from ...
- 关于Idea模块化部署web项目,Web Resource Directories作用
问题由来:接到某个所谓“将web工程中部分代码抽出打包,但待打包部分代码还需要在现场部署时能做微调”的需求. 解决方法:将待打包部分代码作为一个module,让工程依赖该模块,满足抽离打包与现场可调试 ...
- django第一天
今天是双十一跑了个1000很累. django 终于学到了,学了这么多天,乱七八糟的东西. 今天只是学了初级的配置文件和响应请求. 配置CSS和JS 文件目录 配置html文件目录 响应请求 配置路径 ...
- js分析 快速定位 js 代码, 还原被混淆压缩的 js 代码
-1.目录 0.参考 1.页面表现 2. 慢镜头观察:低速网络请求 3. 从头到尾调试:Fiddler 拦截 index.html 并添加 debugger; 4. 快速定位 js 代码 5. 还原被 ...
- c# 向数据库插数据超过1000条
今天想着如何大批量插入数据到数据库中 最开始的想法是使用insert循环插入 但每次都要创建数据库连接 这是非常消耗时间和消耗资源的事.后在网上看到了说使用SqlBulkCopy ,就看了看文档和别 ...
- Beta(4/7)
鐵鍋燉腯鱻 项目:小鱼记账 团队成员 项目燃尽图 冲刺情况描述 站立式会议照片 各成员情况 团队成员 学号 姓名 git地址 博客地址 031602240 许郁杨 (组长) https://githu ...
- 2019-2-14SQLserver中拼音查询数据
SQLserver中获取文字的全拼音: CREATE function [dbo].[f_GetPinyin](@words nvarchar()) returns varchar() as begi ...
- python移植环境
如果整理材料的时候或者给别人共享代码的时候,除了使用docker外,也可以使用pip或者conda生成依赖项文件,然后在其他机器上将该依赖项一一安装就可以了. 但是有很多版本的依赖导致使用pip总是安 ...
- python中栈的单链表实现
参考博客:https://www.cnblogs.com/stacklike/p/8284550.html 基于列表的简单实现 # 先进后出 # 以列表实现的简单栈 class SimpleStack ...
- Android 基础知识
system/app 与 system/priv-app Android4.4系统在system目录下新增了priv-app目录,在该目录下的apk一般都是系统核心应用如Launcher.sy ...