Springboot集成Spring Batch
Spring官网 (https://spring.io/projects/spring-batch#overview)对Spring Batch的解释:
一个轻量级的、全面的批处理框架,用于开发对企业系统的日常操作至关重要的健壮批处理应用程序。
Spring Batch提供了处理大量记录所必需的可重用功能,包括日志/跟踪、事务管理、作业处理统计信息、
作业重启、跳过和资源管理。它还提供了更高级的技术服务和特性,这些特性将通过优化和分区技术支持极高
容量和高性能的批处理作业。无论简单还是复杂,大容量批处理作业都可以以高度可伸缩的方式利用框架来处
理大量信息。
Features(特性):
- Transaction management 事务管理
- Chunk based processing 基于块的处理
- Declarative I/O声明式I / O
- Start/Stop/Restart 启动/停止/启动
- Retry/Skip 重试/跳过
- Web based administration interface (Spring Cloud Data Flow) 基于Web的管理接口(Spring Cloud Data Flow)
Spring batch主要有以下部分组成:
- JobRepository 用来注册job的容器
- JobLauncher 用来启动Job的接口
- Job 实际执行的任务,包含一个或多个Step
- Step step包含ItemReader、ItemProcessor和ItemWriter
- ItemReader 用来读取数据的接口
- ItemProcessor 用来处理数据的接口
- ItemWriter 用来输出数据的接口

一个Job有一个或多个Step组成,Step有读、处理、写三部分操作组成;通过JobLauncher启动Job,启动时从
JobRepository获取Job Execution;
当前运行的Job及Step的结果及状态保存在JobRepository中。
下面是Springboot集成Spring Batch 的 一个Demo:
1.在idea下新建一个springboot项目
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion> <groupId>com.example</groupId>
<artifactId>springbatch</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging> <name>springbatch</name>
<description>Demo project for Spring Boot</description> <parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.1.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent> <properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties> <dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency> <dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency> <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency> <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-batch</artifactId>
</dependency> </dependencies> <build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build> </project>
ItemReader
public class Reader implements ItemReader<String> {
private String[] messages = { "篮球之神 Michael Jordan",
"欢迎来到batch示例 Welcome to Spring Batch Example",
"The more time goes by,The more life happens" };
private int count = 0;
@Override
public String read() throws Exception, UnexpectedInputException, ParseException, NonTransientResourceException{
if(count<messages.length){
return messages[count++];
}else{
count=0;
}
return null;
}
ItemProcessor
public class Processor implements ItemProcessor<String,String> {
@Override
public String process(String data) throws Exception{
return data.toUpperCase();
}
}
ItemWriter
public class Writer implements ItemWriter<String> {
@Override
public void write(List<? extends String> messages) throws Exception{
for(String msg:messages){
System.out.println("输出信息:"+ msg);
}
}
}
Listener
public class JobCompletionListener extends JobExecutionListenerSupport {
@Override
public void beforeJob(JobExecution jobExecution){
if(jobExecution.getStatus()== BatchStatus.STARTED){
System.out.println("批处理执行开始....");
}
}
@Override
public void afterJob(JobExecution jobExecution){
if(jobExecution.getStatus()== BatchStatus.COMPLETED){
System.out.println("批处理执行结束....");
}
}
}
Config
@Configuration
public class BatchConfig { @Autowired
public JobBuilderFactory jobBuilderFactory; @Autowired
public StepBuilderFactory stepBuilderFactory; @Bean
public Job processJob(){
return jobBuilderFactory.get("processJob")
.incrementer(new RunIdIncrementer()).listener(listener())
.flow(orderStep1()).end().build();
} @Bean
public Step orderStep1() {
return stepBuilderFactory.get("orderStep1").<String, String> chunk(1)
.reader(new Reader()).processor(new Processor())
.writer(new Writer()).build();
} @Bean
public JobExecutionListener listener() {
return new JobCompletionListener();
}
}
Controller
@RestController
@EnableScheduling
public class JobInvokerController { @Autowired
JobLauncher jobLauncher; @Autowired
Job processJob; //每20秒执行一次
@Scheduled(cron = "*/20 * * * * * ")
public void handle() throws Exception { JobParameters jobParameters = new JobParametersBuilder().addLong("time", System.currentTimeMillis())
.toJobParameters();
jobLauncher.run(processJob, jobParameters); }
}
启动项目:每20秒执行一次批处理

代码地址:https://github.com/liuchunbo24/Springboot-SpringBatch-Demo
Springboot集成Spring Batch的更多相关文章
- SpringBoot集成Spring Security入门体验
一.前言 Spring Security 和 Apache Shiro 都是安全框架,为Java应用程序提供身份认证和授权. 二者区别 Spring Security:重量级安全框架 Apache S ...
- SpringBoot集成Spring Security(7)——认证流程
文章目录 一.认证流程 二.多个请求共享认证信息 三.获取用户认证信息 在前面的六章中,介绍了 Spring Security 的基础使用,在继续深入向下的学习前,有必要理解清楚 Spring Sec ...
- SpringBoot集成Spring Security(6)——登录管理
文章目录 一.自定义认证成功.失败处理 1.1 CustomAuthenticationSuccessHandler 1.2 CustomAuthenticationFailureHandler 1. ...
- SpringBoot集成Spring Security(5)——权限控制
在第一篇中,我们说过,用户<–>角色<–>权限三层中,暂时不考虑权限,在这一篇,是时候把它完成了. 为了方便演示,这里的权限只是对角色赋予权限,也就是说同一个角色的用户,权限是 ...
- SpringBoot集成Spring Security(4)——自定义表单登录
通过前面三篇文章,你应该大致了解了 Spring Security 的流程.你应该发现了,真正的 login 请求是由 Spring Security 帮我们处理的,那么我们如何实现自定义表单登录呢, ...
- SpringBoot集成Spring Security(2)——自动登录
在上一章:SpringBoot集成Spring Security(1)——入门程序中,我们实现了入门程序,本篇为该程序加上自动登录的功能. 文章目录 一.修改login.html二.两种实现方式 2. ...
- SpringBoot 集成 Spring Session
SpringBoot 集成 Spring Session 应该讲解清楚,为什么要使用 Redis 进行 Session 的管理. Session 复制又是什么概念. Spring Session 在汪 ...
- SpringBoot 集成Spring security
Spring security作为一种安全框架,使用简单,能够很轻松的集成到springboot项目中,下面讲一下如何在SpringBoot中集成Spring Security.使用gradle项目管 ...
- springboot集成Spring Data JPA数据查询
1.JPA介绍 JPA(Java Persistence API)是Sun官方提出的Java持久化规范.它为Java开发人员提供了一种对象/关联映射工具来管理Java应用中的关系数据.它的出现主要是为 ...
随机推荐
- 生鲜配送管理系统_升鲜宝V2.0 供应商协同系统设计思想及设计效果展现(一)
生鲜配送管理系统[升鲜宝]V2.0 供应商协同系统小程序设计思想及操作说明(一) 生鲜供应链企业,最重要的二个方面,其中一个是客户服务(销售订单) 另外一个就是供应商的管控,只有做好了这 ...
- springCloud feign使用/优化总结
基于springCloud Dalston.SR3版本 1.当接口参数是多个的时候 需要指定@RequestParam 中的value来明确一下. /** * 用户互扫 * @param uid 被扫 ...
- 码云代码托管平台与TortoiseSVN的使用
1.到https://gitee.com/进行注册,然后登陆 可以发现可以将项目设为私有 2.下载tortoisesvn,一路next安装即可 3.项目创建 4.下载项目 5.创建文件并提交 6.如何 ...
- qt5.11.2+vs2017环境下配置pcl1.8.1以及第三方依赖库vtk的编译
1.准备工作 我所用的开发环境是win10下的qt5.11.2配置了vs2017的编译器,根据自己所用的VS的版本去官网下载对应版本的pcl库,如下 PCL-1.8.1-AllInOne-msvc20 ...
- vuetify
vue add vuetify打包之后再发过来另外剪头发 typescript 1.配置 2.当用 let 声明一个变量,它使用的是词法作用域或块作用域. let与var区别,所以要--- 3.看来 ...
- windows10 uwp获取设备当前地理位置(经纬度)
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- Codeforces #541 (Div2) - F. Asya And Kittens(并查集+链表)
Problem Codeforces #541 (Div2) - F. Asya And Kittens Time Limit: 2000 mSec Problem Description Inp ...
- 关于当前Web前端技术的一些感悟和笔记
最近这些年,随着前端应用技术突飞猛进,产生了很多新的前端框架,当然也引入了数不胜数的前端技术概念,前端不在是早期Web Form的拖拉处理方式,也不再是Ajax+HTML那么简单,随着前端技术的发展, ...
- vue 绑定样式的几种方式
vue 绑定样式 对象语法 1.v-bind:class设置一个对象,动态切换class <div :class="{'active':isActive}">xxx&l ...
- matlab转C语言
1.软件版本 matlab R2018a 2.步骤 (1).编写特定功能的matlab代码,以及其测试文件 (2).检查matlab代码的兼容性,确保matlab代码都能转换成C/C++代码(并不是 ...