Spring Batch学习笔记(一)
Spring Batch简介
Spring Batch提供了可重复使用的功能,用来处理大量数据。包括记录、跟踪,事务管理,作业处理统计,作业重启,跳过和资源管理。
此外还提供了更高级的技术服务和功能,通过优化和分区技术实现极高容量和高性能的批处理作业。
Spring Batch使用场景
(1)一般的批处理程序
·从数据库,文件或者队列中读取大量数据
·处理读取到的数据
·将处理完成的数据保存到文件,数据库
(2)业务场景
·定期提交批处理
·并发批处理,并行处理Job
·分阶段的企业消息驱动处理
·大规模并行批处理
·失败后手动或预定重启
·依赖步骤的顺序处理
·部分处理,跳过记录
·整批交易,适用于批量较小或现有存储过程/脚本的情况
Spring Batch主要组成部分
·JobRepository,用来注册job的容器
·JobLauncher,用来启动job的接口
·Job,实际执行的任务,包含一个或多个Step
·Step,step包含ItemReader、ItemProcessor和ItemWriter
·ItemReader,用来读取数据的接口
·ItemProcessor,用来处理数据的接口
·ItemWriter,用来输出数据的接口
以上Spring Batch的主要组成部分只需要注册成Spring的Bean即可。批处理的配置类上需要使用@EnabelBatchProcessing。
代码
(1)监听器JobListener
@Component
public class JobListener implements JobExecutionListener{
@Override
public void beforeJob(JobExecution jobExecution){
// Job执行前需要执行的操作
}
@Override
public void afterJob(JobExecution jobExecution){
// Job执行完成后需要执行的操作
}
}
(2)配置类DataBatchConfiguration
@Configuration
@EnableBatchProcessing
public class DataBatchConfiguration{
// 用于构建Job
@Resource
private JobBuilderFactory jobBuilderFactory;
// 用于构建Step
@Resource
private StepBuilderFactory stepBuilderFactory;
// 监听器
@Resource
private JobListener jobListener;
// ItemReader(使用的其中一种读取方式)
@Autowired
private RepositoryItemReader readerData;
// ItemWriter
@Autowired
private ItemReader writerData;
// Job
@Bean
public Job dataHandleJob(){
return jobBuilderFactory.get("dataHandleJob").incrementer(new RunIdIncrementer()).start(getDataStep())
.listener(jobListener).build();
}
// Step
// User:要处理的对象
@Bean
public Step getTDistSellOut() {
return stepBuilderFactory.get("getData").<User, User>chunk(10000) // 一次commit数据的数量
.faultTolerant().retryLimit(3)
.retry(Exception.class)
.skipLimit(100) // 发生异常时,允许重试的次数
.skip(Exception.class)
.reader(readerData) // reader
.writer(writerData).build(); // writer
}
}
(3)读取类ReaderStep
@Component
public class ReaderStep{
@Resource
private EntityManagerFactory emf;
@Autowired
private UserRepository userRepository;
@Bean RepositoryItemReader<User> readerData(){
// 排序map(读取数据按照ID进行正序排列)
Map<String,Sort.Direction> map = new HashMap<>();
map.put("id",sort.Direction.ASC);
// SQL语句所需参数LIST
List<String> params = new ArrayList<>();
params.add("2019-03-20");
RepositoryItemReader<User> repositoryItemReader = new new RepositoryItemReader<>();
// Set Repository
repositoryItemReader.setRepository(userRepository);
// Set PageSize(没有会报错)
repositoryItemReader.setPageSize(5);
// Set Repository Method
repositoryItemReader.setMethodName("findByDateLike");
// Set 参数List
repositoryItemReader.setArguments(params);
// Set 排序Map
repositoryItemReader.setSort(map);
return repositoryItemReader;
}
}
(4)写出类WriterStep
@Component
public class WriterStep {
@Resource
private UserRepository userRepository;
@Bean
public RepositoryItemWriter<User> writerData(){
RepositoryItemWriter<User> repositoryItemWriter = new RepositoryItemWriter<>();
repositoryItemWriter.setRepository(userRepository);
repositoryItemWriter.setMethodName("save");
return repositoryItemWriter;
}
}
参考网址
https://www.cnblogs.com/ealenxie/p/9647703.html
Spring Batch学习笔记(一)的更多相关文章
- Spring Batch学习笔记三:JobRepository
此系列博客皆为学习Spring Batch时的一些笔记: Spring Batch Job在运行时有很多元数据,这些元数据一般会被保存在内存或者数据库中,由于Spring Batch在默认配置是使用H ...
- Spring Batch学习笔记二
此系列博客皆为学习Spring Batch时的一些笔记: Spring Batch的架构 一个Batch Job是指一系列有序的Step的集合,它们作为预定义流程的一部分而被执行: Step代表一个自 ...
- spring batch学习笔记
Spring Batch是什么? Spring Batch是一个基于Spring的企业级批处理框架,按照我师父的说法,所有基于Spring的框架都是使用了spring的IoC特性,然后加上 ...
- 【转】Spring.NET学习笔记——目录
目录 前言 Spring.NET学习笔记——前言 第一阶段:控制反转与依赖注入IoC&DI Spring.NET学习笔记1——控制反转(基础篇) Level 200 Spring.NET学习笔 ...
- Spring MVC 学习笔记一 HelloWorld
Spring MVC 学习笔记一 HelloWorld Spring MVC 的使用可以按照以下步骤进行(使用Eclipse): 加入JAR包 在web.xml中配置DispatcherServlet ...
- SpringBoot + Spring Security 学习笔记(五)实现短信验证码+登录功能
在 Spring Security 中基于表单的认证模式,默认就是密码帐号登录认证,那么对于短信验证码+登录的方式,Spring Security 没有现成的接口可以使用,所以需要自己的封装一个类似的 ...
- SpringBoot + Spring Security 学习笔记(三)实现图片验证码认证
整体实现逻辑 前端在登录页面时,自动从后台获取最新的验证码图片 服务器接收获取生成验证码请求,生成验证码和对应的图片,图片响应回前端,验证码保存一份到服务器的 session 中 前端用户登录时携带当 ...
- spring揭密学习笔记
spring揭密学习笔记 spring揭密学习笔记(1) --spring的由来 spring揭密学习笔记(2)-spring ioc容器:IOC的基本概念
- Spring MVC 学习笔记12 —— SpringMVC+Hibernate开发(1)依赖包搭建
Spring MVC 学习笔记12 -- SpringMVC+Hibernate开发(1)依赖包搭建 用Hibernate帮助建立SpringMVC与数据库之间的联系,通过配置DAO层,Service ...
随机推荐
- js-addEventListener()第三个参数useCapture
概述: 第3个参数叫做useCapture,是一個boolean值,就是true or false .如果送出true的話就是瀏覽器會使用Capture方式,false的話是Bubbling,只有在特 ...
- Hadoop新手学习指导
对于我们新手入门学习hadoop大数据存储的朋友来说,首先了解一下云计算和云计算技术是有必要的.下面先是介绍云计算和云计算技术的: 云计算,是一种基于互联网的计算方式,通过这 ...
- 从输入url到显示网页发生了什么
原文链接:https://juejin.im/post/5bf23afa6fb9a049be5d1494 在浏览器中输入url到显示网页主要包含两个部分: 网络通信和页面渲染 互联网内各网络设备间的通 ...
- Basic4android v3.80 beta 发布
增加了条件编译,共享模块,部分支持jar 文件直接访问.还有其他一些更新. I'm happy to release B4A v3.80 BETA. This version includes sev ...
- 2018.10.19 NOIP模拟 加密(模拟)
传送门 直接按hashhashhash函数反着算回去就行了. 加法用exgcdexgcdexgcd,异或直接枚举二进制位. 代码
- 2018.10.16 spoj Can you answer these queries V(线段树)
传送门 线段树经典题. 就是让你求左端点在[l1,r1][l1,r1][l1,r1]之间,右端点在[l2,r2][l2,r2][l2,r2]之间且满足l1≤l2,r1≤r2l1\le l2,r1 \l ...
- 2018.06.29 NOIP模拟 繁星(前缀和)
繁星 [问题描述] 要过六一了,大川正在绞尽脑汁想送给小伙伴什么礼物呢.突然想起以前拍过一张夜空中的繁星的照片,这张照片已经被处理成黑白的,也就是说,每个像素只可能是两个颜色之一,白或黑.像素(x,y ...
- 2018.08.20 loj#116. 有源汇有上下界最大流(模板)
传送门 貌似就是转成无源汇,然后两遍最大流搞定? 其实第二遍跑最大流是自动加上了第一次的答案. 代码: #include<bits/stdc++.h> #define N 100005 # ...
- 被弃用的php函数以及被那个代替
原文链接 http://blog.csdn.net/a11085013/article/details/8937848 下面列举了部分被弃用的函数: call_user_method ...
- Linux服务器部署系列之四—DHCP篇
DHCP服务器的配置是Linux服务器配置中最简单的服务之一,网上也有很多相关文档,不过大部分都只是讲解了配置.虽然我这篇文档也不一定很完善,不过我还是希望能够尽量说得明白一些,同时也希望大家能够提供 ...