01.SpringBatch小入门
原创
©著作权归作者所有:来自51CTO博客作者wx6307135cb9367的原创作品,请联系作者获取转载授权,否则将追究法律责任
A.概念
企业域内的许多应用程序都需要批量处理才能在关键任务环境中执行业务操作。这些业务包括:
- 自动,复杂地处理大量信息,无需用户交互即可最有效地进行处理。这些操作通常包括基于时间的事件(例如月末计算,通知或通信)。
- 定期应用非常大的数据集(例如,保险利益确定或费率调整)重复处理复杂的业务规则。
- 从内部和外部系统接收的信息的集成,通常需要格式化,验证和以事务方式进行的处理到记录系统中。批处理每天用于为企业处理数十亿笔事务。
Spring Batch 是一个轻量级的,全面的批处理框架,旨在支持开发对企业系统的日常运行至关重要的强大的批处理应用程序。 Spring Batch 构建在人们期望的 Spring 框架特性(生产力,基于 POJO 的开发方法和普遍的易用性)的基础上,同时使开发人员在必要时可以轻松访问和利用更高级的企业服务。 Spring Batch 不是一个调度框架。商业空间和开放源代码空间中都有许多好的企业调度程序(例如 Quartz,Tivoli,Control-M 等)。它旨在与计划程序一起工作,而不是替换计划程序。
Spring Batch 提供了可重用的功能,这些功能对于处理大量记录至关重要,包括日志记录/跟踪,事务 Management,作业处理统计信息,作业重启,跳过和资源 Management。它还提供了更高级的技术服务和功能,这些功能可通过优化和分区技术来实现超大量和高性能的批处理作业。 Spring Batch 可用于简单的用例(例如,将文件读入数据库或运行存储过程),也可以用于复杂的大量用例(例如,在数据库之间移动大量数据,对其进行转换等)。上)。大量批处理作业可以以高度可扩展的方式利用框架来处理大量信息。
B.搭建springBatch项目
在线创建: https://start.spring.io/
解压运行爆出异常
解决异常方法:配置一个数据库
C.创建SpringBatch入门小程序
1.配置注解类
- @Configuration
- @EnableBatchProcessing
2.创建任务对象的工厂
任务的执行由step决定,注入创建step对象的对象
3.由工厂创建任务对
Job配置
package com.springBatch.springBatch.config;
import org.springframework.batch.core.Job;
import org.springframework.batch.core.Step;
import org.springframework.batch.core.StepContribution;
import org.springframework.batch.core.configuration.annotation.EnableBatchProcessing;
import org.springframework.batch.core.configuration.annotation.JobBuilderFactory;
import org.springframework.batch.core.configuration.annotation.StepBuilderFactory;
import org.springframework.batch.core.scope.context.ChunkContext;
import org.springframework.batch.core.step.tasklet.Tasklet;
import org.springframework.batch.repeat.RepeatStatus;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
@EnableBatchProcessing
public class JobConfiguration {
/**
* 注入创建任务对象 的工厂
* */
@Autowired
private JobBuilderFactory jobBuilderFactory;
/**
* 任务的执行由 step 决定
* 注入创建 Step 对象 的工厂
*/
@Autowired
private StepBuilderFactory stepBuilderFactory;
//创建任务对象
@Bean
public Job helloWorldJob(){
return jobBuilderFactory.get("helloWorldJob")
.start(step1())
.build();
}
// 因为返回的是一个Step类型的对象,所以要用一个@Bean
@Bean
public Step step1() {
System.out.println("怎么创建一个step对象?");
//由Step对象工程创建
return stepBuilderFactory.get("step1")
// 要执行的功能
.tasklet(new Tasklet() {
@Override
public RepeatStatus execute(StepContribution stepContribution, ChunkContext chunkContext) throws Exception {
System.out.println("你好,我是王宝强");
// 任务执行完毕之后需要返回一个状态值,来告诉Job这个step已执行完毕
return RepeatStatus.FINISHED;
}
}).build();
}
}
异常排查:为正确注入Bean
运行结果
D.替换为mysql数据库
MySQL依赖替换H2的依赖
配置数据源文件 application.properties
spring.datasource.url=jdbc:mysql:///springbatch_test?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf-8
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
#用于初始化springbatch相关的表
spring.datasource.schema=classpath:/org/springframework/batch/core/schema-mysql.sql
#初始化的时候执行这个要求:总是
spring.batch.initialize-schema=always
配置好后运行
就是这个批处理的表batch是默认的表,它已经写好sql语句了