java批处理框架 pdf_史上最轻松入门之Spring Batch - 轻量级批处理框架实践
从 MariaDB 一张表内读 10 万条记录,经处理后写到 MongoDB 。
Batch 任务模型
具体实现
1、新建 Spring Boot 应用,依赖如下:
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-starter-logging
org.springframework.boot
spring-boot-starter-tomcat
org.springframework.boot
spring-boot-starter-undertow
org.springframework.boot
spring-boot-starter-log4j2
org.springframework.boot
spring-boot-starter-data-mongodb
org.springframework.boot
spring-boot-starter-batch
org.mariadb.jdbc
mariadb-java-client
2.0.2
org.projectlombok
lombok
1.16.14
2、创建一张表,并生成 10 万条数据
DROP TABLE people IF EXISTS;
CREATE TABLE people (
id BIGINT IDENTITY NOT NULL PRIMARY KEY,
first_name VARCHAR(20),
last_name VARCHAR(20)
);
3、创建 Person 类
@Data
public class Person {
private Long id;
private String lastName;
private String firstName;
}
4、创建一个中间处理器 PersonItemProcessor
import org.springframework.batch.item.ItemProcessor;
@Log4j2
public class PersonItemProcessor implements ItemProcessor {
@Override
public Person process(final Person person) throws Exception {
final String firstName = person.getFirstName().toUpperCase();
final String lastName = person.getLastName().toUpperCase();
final Person transformedPerson = new Person(firstName, lastName);
log.info("Converting (" + person + ") into (" + transformedPerson + ")");
return transformedPerson;
}
}
5、创建 PersonMapper,用户数据库映射
public class PersonMapper implements RowMapper {
private static final String ID_COLUMN = "id";
private static final String NICKNAME_COLUMN = "first_name";
private static final String EMAIL_COLUMN = "last_name";
@Override
public Object mapRow(ResultSet resultSet, int i) throws SQLException {
Person user = new Person();
person.setId(resultSet.getLong(ID_COLUMN));
person.setNickname(resultSet.getString(NICKNAME_COLUMN));
person.setEmail(resultSet.getString(EMAIL_COLUMN));
return person;
}
}
6、创建任务完成的监听 JobCompletionNotificationListener
@Log4j2
@Component
public class JobCompletionNotificationListener extends JobExecutionListenerSupport {
@Override
public void afterJob(JobExecution jobExecution) {
if(jobExecution.getStatus() == BatchStatus.COMPLETED) {
log.info("!!! JOB FINISHED! Time to verify the results");
}
}
}
7、构建批处理任务 BatchConfiguration
@Configuration
@EnableBatchProcessing
public class BatchConfiguration {
@Autowired
public JobBuilderFactory jobBuilderFactory;
@Autowired
public StepBuilderFactory stepBuilderFactory;
@Autowired
public DataSource dataSource;
@Autowired
public MongoTemplate mongoTemplate;
@Bean
public JdbcCursorItemReader reader(){
JdbcCursorItemReader itemReader = new JdbcCursorItemReader();
itemReader.setDataSource(dataSource);
itemReader.setSql("select id, nickname, email from people");
itemReader.setRowMapper(new PersonMapper());
return itemReader;
}
@Bean
public PersonItemProcessor processor() {
return new PersonItemProcessor();
}
@Bean
MongoItemWriter writer(){
MongoItemWriter itemWriter = new MongoItemWriter();
itemWriter.setTemplate(mongoTemplate);
itemWriter.setCollection("branch");
return itemWriter;
}
@Bean
public Step step() {
return stepBuilderFactory.get("step")
. chunk(10)
.reader(reader())
.processor(processor())
.writer(writer())
.build();
}
@Bean
public Job importUserJob(JobCompletionNotificationListener listener) {
return jobBuilderFactory.get("importUserJob")
.incrementer(new RunIdIncrementer())
.listener(listener)
.flow(step())
.end()
.build();
}
}
任务处理结果
0出错,耗时 2 分钟左右,测试机 Mac
© 著作权归作者所有,转载或内容合作请联系作者
本文由博客一文多发平台 OpenWrite 发布!
原文出处:https://www.cnblogs.com/springforall/p/11762341.html
java批处理框架 pdf_史上最轻松入门之Spring Batch - 轻量级批处理框架实践相关推荐
- java操作sentinel_sentinel (史上最全+入门教程)
文章很长,建议收藏起来,慢慢读! 疯狂创客圈为小伙伴奉上以下珍贵的学习资源: 疯狂创客圈 经典图书 : <Netty Zookeeper Redis 高并发实战> 面试必备 + 大厂必备 ...
- java batch基础_详解Spring Batch 轻量级批处理框架实践
实践内容 从 MariaDB 一张表内读 10 万条记录,经处理后写到 MongoDB . 具体实现 1.新建 Spring Boot 应用,依赖如下: org.springframework.boo ...
- java byte char io流_一文带你看懂JAVA IO流,史上最全面的IO教学
原标题:一文带你看懂JAVA IO流,史上最全面的IO教学 一.IO流是什么 惯例引用百科的回答 流是一种抽象概念,它代表了数据的无结构化传递.按照流的方式进行输入输出,数据被当成无结构的字节序或字符 ...
- Spring batch批量处理框架最佳实践
spring batch精选,一文吃透spring batch批量处理框架 前言碎语 批处理是企业级业务系统不可或缺的一部分,spring batch是一个轻量级的综合性批处理框架,可用于开发企业信息 ...
- Spring Batch之批处理实践
这里对Spring Batch 进行批处理实践. 介绍 本文将会讲述SpringBatch 如何搭建并运行起来的. 本教程,将会介绍从磁盘读取文件,并写入MySql 中. 什么是Spring Batc ...
- JAVA面试--史上最全 69 道 Spring 面试题和答案
2019独角兽企业重金招聘Python工程师标准>>> Spring 概述 1. 什么是spring? Spring 是个java企业级应用的开源开发框架.Spring主要用来开发J ...
- java 加密方式_Get史上最优雅的加密方式!没有之一!
你的配置文件是不是还在使用下面这种落后的配置暴露一些密码: 如果是,那么继续往下看.笔者今天介绍史上最优雅加密接入方式:jasypt. 使用方式 用法一 先看用法有多简单,以 springboot 为 ...
- android项目实战博学谷源码_Vue框架:史上最详细的Vue实战项目之喵喵电影(视频+源码)...
Vue是web前端中重要的框架之一,与其他重量级框架不同的是,Vue 采用自底向上增量开发的设计,Vue 的核心库只关注视图层,并且非常容易学习,非常容易与其它库或已有项目整合.所以,对于web前端开 ...
- java springmvc 教程_史上最全最强SpringMVC详细示例实战教程
SpringMVC框架介绍 1) Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面. Spring 框架提供了构建 Web 应用程序的全功 ...
- java 搞笑翻译_史上最搞笑神翻译,笑翻网友
原标题:史上最搞笑神翻译,笑翻网友 中国有很多有趣的网络流行语 精辟而且有着搞笑的内涵 如何不失其原有的风味, 将它们翻译成英文? 请开始我的表演! 戏精/杠精/小鲜肉/小奶狗/凉凉/佛系 你算哪块小 ...
最新文章
- THE发布世界大学声誉排名,清华位居全球前10
- 深度神经网络对基于EEG的情绪识别的关键频带和通道的研究
- cmd mysql_CMD命令操作MySql数据库的方法详解
- 【Python】解决TypeError: 'unicode' object does not support item assignment
- Spring 使用context:annotation-config的设置
- 智慧交通day02-车流量检测实现03:辅助功能(交并比and候选框的表现形式)
- @requestbody和@requestparam作用
- Java7----ForkJoin框架
- docker search
- JqGrid常用示例
- 做真正Hacker 的乐趣──自己动手去实践
- 《Android内核剖析》读书笔记 第13章 View工作原理【View树遍历】
- js中addEventLister()函数的用法
- 各种格式的文件使用工具打开
- [TOOLS]confluence添加word宏显示上传的word文档
- win10 html css,纯 HTML/CSS 高仿 Win10 加载动画
- mysql与phpmyadmin安装_phpMyAdmin下载、安装和使用入门_MySQL
- IBM智慧商务 - IBM和SugarCRM携手提供全方位渠道客户体验
- 孩子数学成绩不好怎么办_孩子数学成绩差怎么才能快速提高
- 国产CAD制图软件中怎么设置两点标注?
热门文章
- ginx+Tomcat负载均衡配置
- Ubuntu 下为 Idea 创建启动图标.
- RHEL6.1 去掉开机总是提示注册啊,去掉rhsm-compliance-icon小图标
- React开发中常见问题和 Warning
- python datetime.datetime.now_python时间日期datetime模块
- 对路径的访问被拒绝怎么办_工作组计算机无法访问,教您无法访问工作组计算机的解决技巧...
- Rabbit MQ 延迟插件rabbitmq_delayed_message_exchange的安装
- 工作中的注意事项、细节
- @pathvariable参数_SpringMVC 五种注解参数绑定
- MAC编译ffmpeg