从 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 - 轻量级批处理框架实践相关推荐

  1. java操作sentinel_sentinel (史上最全+入门教程)

    文章很长,建议收藏起来,慢慢读! 疯狂创客圈为小伙伴奉上以下珍贵的学习资源: 疯狂创客圈 经典图书 : <Netty Zookeeper Redis 高并发实战> 面试必备 + 大厂必备 ...

  2. java batch基础_详解Spring Batch 轻量级批处理框架实践

    实践内容 从 MariaDB 一张表内读 10 万条记录,经处理后写到 MongoDB . 具体实现 1.新建 Spring Boot 应用,依赖如下: org.springframework.boo ...

  3. java byte char io流_一文带你看懂JAVA IO流,史上最全面的IO教学

    原标题:一文带你看懂JAVA IO流,史上最全面的IO教学 一.IO流是什么 惯例引用百科的回答 流是一种抽象概念,它代表了数据的无结构化传递.按照流的方式进行输入输出,数据被当成无结构的字节序或字符 ...

  4. Spring batch批量处理框架最佳实践

    spring batch精选,一文吃透spring batch批量处理框架 前言碎语 批处理是企业级业务系统不可或缺的一部分,spring batch是一个轻量级的综合性批处理框架,可用于开发企业信息 ...

  5. Spring Batch之批处理实践

    这里对Spring Batch 进行批处理实践. 介绍 本文将会讲述SpringBatch 如何搭建并运行起来的. 本教程,将会介绍从磁盘读取文件,并写入MySql 中. 什么是Spring Batc ...

  6. JAVA面试--史上最全 69 道 Spring 面试题和答案

    2019独角兽企业重金招聘Python工程师标准>>> Spring 概述 1. 什么是spring? Spring 是个java企业级应用的开源开发框架.Spring主要用来开发J ...

  7. java 加密方式_Get史上最优雅的加密方式!没有之一!

    你的配置文件是不是还在使用下面这种落后的配置暴露一些密码: 如果是,那么继续往下看.笔者今天介绍史上最优雅加密接入方式:jasypt. 使用方式 用法一 先看用法有多简单,以 springboot 为 ...

  8. android项目实战博学谷源码_Vue框架:史上最详细的Vue实战项目之喵喵电影(视频+源码)...

    Vue是web前端中重要的框架之一,与其他重量级框架不同的是,Vue 采用自底向上增量开发的设计,Vue 的核心库只关注视图层,并且非常容易学习,非常容易与其它库或已有项目整合.所以,对于web前端开 ...

  9. java springmvc 教程_史上最全最强SpringMVC详细示例实战教程

    SpringMVC框架介绍 1) Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面. Spring 框架提供了构建 Web 应用程序的全功 ...

  10. java 搞笑翻译_史上最搞笑神翻译,笑翻网友

    原标题:史上最搞笑神翻译,笑翻网友 中国有很多有趣的网络流行语 精辟而且有着搞笑的内涵 如何不失其原有的风味, 将它们翻译成英文? 请开始我的表演! 戏精/杠精/小鲜肉/小奶狗/凉凉/佛系 你算哪块小 ...

最新文章

  1. THE发布世界大学声誉排名,清华位居全球前10
  2. 深度神经网络对基于EEG的情绪识别的关键频带和通道的研究
  3. cmd mysql_CMD命令操作MySql数据库的方法详解
  4. 【Python】解决TypeError: 'unicode' object does not support item assignment
  5. Spring 使用context:annotation-config的设置
  6. 智慧交通day02-车流量检测实现03:辅助功能(交并比and候选框的表现形式)
  7. @requestbody和@requestparam作用
  8. Java7----ForkJoin框架
  9. docker search
  10. JqGrid常用示例
  11. 做真正Hacker 的乐趣──自己动手去实践
  12. 《Android内核剖析》读书笔记 第13章 View工作原理【View树遍历】
  13. js中addEventLister()函数的用法
  14. 各种格式的文件使用工具打开
  15. [TOOLS]confluence添加word宏显示上传的word文档
  16. win10 html css,纯 HTML/CSS 高仿 Win10 加载动画
  17. mysql与phpmyadmin安装_phpMyAdmin下载、安装和使用入门_MySQL
  18. IBM智慧商务 - IBM和SugarCRM携手提供全方位渠道客户体验
  19. 孩子数学成绩不好怎么办_孩子数学成绩差怎么才能快速提高
  20. 国产CAD制图软件中怎么设置两点标注?

热门文章

  1. ginx+Tomcat负载均衡配置
  2. Ubuntu 下为 Idea 创建启动图标.
  3. RHEL6.1 去掉开机总是提示注册啊,去掉rhsm-compliance-icon小图标
  4. React开发中常见问题和 Warning
  5. python datetime.datetime.now_python时间日期datetime模块
  6. 对路径的访问被拒绝怎么办_工作组计算机无法访问,教您无法访问工作组计算机的解决技巧...
  7. Rabbit MQ 延迟插件rabbitmq_delayed_message_exchange的安装
  8. 工作中的注意事项、细节
  9. @pathvariable参数_SpringMVC 五种注解参数绑定
  10. MAC编译ffmpeg