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学习笔记(一)的更多相关文章

  1. Spring Batch学习笔记三:JobRepository

    此系列博客皆为学习Spring Batch时的一些笔记: Spring Batch Job在运行时有很多元数据,这些元数据一般会被保存在内存或者数据库中,由于Spring Batch在默认配置是使用H ...

  2. Spring Batch学习笔记二

    此系列博客皆为学习Spring Batch时的一些笔记: Spring Batch的架构 一个Batch Job是指一系列有序的Step的集合,它们作为预定义流程的一部分而被执行: Step代表一个自 ...

  3. spring batch学习笔记

    Spring Batch是什么?       Spring Batch是一个基于Spring的企业级批处理框架,按照我师父的说法,所有基于Spring的框架都是使用了spring的IoC特性,然后加上 ...

  4. 【转】Spring.NET学习笔记——目录

    目录 前言 Spring.NET学习笔记——前言 第一阶段:控制反转与依赖注入IoC&DI Spring.NET学习笔记1——控制反转(基础篇) Level 200 Spring.NET学习笔 ...

  5. Spring MVC 学习笔记一 HelloWorld

    Spring MVC 学习笔记一 HelloWorld Spring MVC 的使用可以按照以下步骤进行(使用Eclipse): 加入JAR包 在web.xml中配置DispatcherServlet ...

  6. SpringBoot + Spring Security 学习笔记(五)实现短信验证码+登录功能

    在 Spring Security 中基于表单的认证模式,默认就是密码帐号登录认证,那么对于短信验证码+登录的方式,Spring Security 没有现成的接口可以使用,所以需要自己的封装一个类似的 ...

  7. SpringBoot + Spring Security 学习笔记(三)实现图片验证码认证

    整体实现逻辑 前端在登录页面时,自动从后台获取最新的验证码图片 服务器接收获取生成验证码请求,生成验证码和对应的图片,图片响应回前端,验证码保存一份到服务器的 session 中 前端用户登录时携带当 ...

  8. spring揭密学习笔记

    spring揭密学习笔记 spring揭密学习笔记(1) --spring的由来 spring揭密学习笔记(2)-spring ioc容器:IOC的基本概念

  9. Spring MVC 学习笔记12 —— SpringMVC+Hibernate开发(1)依赖包搭建

    Spring MVC 学习笔记12 -- SpringMVC+Hibernate开发(1)依赖包搭建 用Hibernate帮助建立SpringMVC与数据库之间的联系,通过配置DAO层,Service ...

随机推荐

  1. 【校招面试 之 C/C++】第30题 C++ 11新特性(一)之auto关键字

    1.自动类型推断 auto自动类型推断,用于从初始化表达式中推断出变量的数据类型.通过auto的自动类型推断,可以大大简化我们的编程工作.下面是一些使用auto的例子. #include <ve ...

  2. python之多线程队列

    # 一共有以下3种队列# 1.先进先出# 2.后进先出# 3.存储数据的时候可设置优先级的队列,设置不同的优先级,取的时候按照优先级的顺序来取 下面介绍一下队列的方法,如果要使用队列,则需要导入一个模 ...

  3. 测试SQL

    create database testDB create table users(    id int primary key identity(1,1),    uname nvarchar(20 ...

  4. MVC中构建Linq条件、排序、Selector字段过滤

    代码: System.Linq.Expressions.Expression<Func<Domain.S_ROLE, bool>> expressWhere1 = (c =&g ...

  5. PAT 1083 是否存在相等的差(20)(代码+思路)

    1083 是否存在相等的差(20 分) 给定 N 张卡片,正面分别写上 1.2.--.N,然后全部翻面,洗牌,在背面分别写上 1.2.--.N.将每张牌的正反两面数字相减(大减小),得到 N 个非负差 ...

  6. BZOJ 1430 小猴打架 - prufer数列

    描述 一开始森林里面有N只互不相识的小猴子,它们经常打架,但打架的双方都必须不是好朋友.每次打完架后,打架的双方以及它们的好朋友就会互相认识,成为好朋友.经过$N-1$次打架之后,整个森林的小猴都会成 ...

  7. The server is busy, please refresh

  8. 面向对象与基于对象 学习记录 thread举例

    /********************************************************************/* @file* @author def< qq gr ...

  9. JavaScript 的数据类型及其检测

    JavaScript 有几种类型的值? Javascript 有两种数据类型,分别是基本数据类型和引用数据类型.其中基本数据类型包括 Undefined.Null.Boolean.Number.Str ...

  10. 数据库链接 mybatis spring data jpa 两种方式

    jdbc mybatis                     spring data jpa dao service webservice jaxrs     jaxws  springmvc w ...