文档章节

Spring Batch学习笔记(一)

o
 osc_y8yehimr
发布于 2019/03/20 16:38
字数 680
阅读 22
收藏 0

精选30+云产品,助力企业轻松上云!>>>

##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

o
粉丝 0
博文 500
码字总数 0
作品 0
私信 提问
加载中
请先登录后再评论。
20191105 《Spring5高级编程》笔记-【目录】

背景 开始时间:2019/09/18 21:30 Spring5高级编程版次:2019-01-01(第5版) Spring5最新版本:5.1.9 CURRENT GA 官方文档 Spring Framework官网 GitHub地址 目录 第1章 Spring介绍 1.1. 什...

osc_k9z4xzi8
2019/11/05
1
0
Spring笔记 - 概述

参考书 Spring实战(第3版) spring-framework-reference Spring in Action, 4th Edition 轻量级JavaEE企业应用实战 Spring 3.x企业实用开发实战 说明: 本系列文章是作者学习与回顾Spring时...

Peter_Peng
2015/07/02
344
0
2019读过的好书推荐

[TOC] 1. 引言 2019年即将过去,每年都会有个习惯把回顾一下读过的书,并把觉得比较好的书列成书单。今年也读了不少书,读的书比较杂,大部分是在微信读书上完成,有些书让人受益匪浅,下面是...

osc_oupyj5vz
2019/12/30
1
0
MyBatis 学习笔记(七)批量插入ExecutorType.BATCH效率对比

MyBatis 学习笔记(七)批量插入ExecutorType.BATCH效率对比 一、在mybatis中ExecutorType的使用 1.Mybatis内置的ExecutorType有3种,默认的是simple,该模式下它为每个语句的执行创建一个新...

osc_3f97qblr
2019/05/22
9
0
Spring声明式事务管理示例——MyBatis学习笔记之十六

在本系列文章的《MyBatis与Spring集成示例续》中,介绍了Spring的编程式事务管理。网友 dabing69221提出讲一下MyBatis与Spring整合的声明式事务管理,今天就根据这一知识点,对上文的示例进行...

NashMaster2011
2013/07/02
0
0

没有更多内容

加载失败,请刷新页面

加载更多

是否有可能从另一个git存储库中挑选一个提交? - Is it possible to cherry-pick a commit from another git repository?

问题: I'm working with a git repository that needs a commit from another git repository that knows nothing of the first. 我正在使用一个git存储库,需要从另一个不知道第一个存储库......

技术盛宴
昨天
26
0
【LeetCode】53 盛最多水的容器

题目 解题思路 双指针法: https://leetcode-cn.com/problems/container-with-most-water/solution/sheng-zui-duo-shui-de-rong-qi-by-leetcode-solution/ 代码 public class Solution { ......

JaneRoad
昨天
16
0
阿里云OSS配置CDN加速

首先购买CDN流量包 然后添加域名 添加好后 然后将域名OSS.xxxx.com 解析到 生成的CDN域名上 这样就完成了

可达鸭眉头一皱
昨天
16
0
js 整数与小数正则替换片段

说明 /(\d+)/g 整数 /(\d+\.\d+)rem/g 小数 /(\d+\.\d+|\d+)rem/g 其中 | 或 条件 例子 全局查找带 rem 单位的,替换成 px 单位 let text = text.replace(/(\d+\.\d+|\d+)rem/g, function(s......

DrChenXX
昨天
17
0
ubuntu下minicorba例子

一、开发环境安装 sudo apt install omniorb omniorb-idl omniidl libomniorb4-dev libomniorb4-2 omniorb-nameserver libomnithread4 libomnithread4-dev 二、源文件: Hi.idl module ......

wangxuwei
昨天
18
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部