JobLauncher : 用来启动Job的接口
Job : 实际执行的任务,包含一个或多个Step
Step : Step 步骤,包含ItemReader、ItemProcessor、ItemWriter
ItemReader : 用来读取数据的接口
ItemProcessor : 用来处理数据的接口
ItemWriter : 用来输出数据的接口
SpringBatch Java Config(Java 配置)
BatchConfig.java(不完整,一部分)
@Configuration
@EnableBatchProcessing
public class BatchConfig {
* 作业仓库
* @param dataSource
* @param transactionManager
* @return
* @throws Exception
@Bean
public JobRepository jobRepository(DataSource dataSource, PlatformTransactionManager transactionManager) throws Exception{
JobRepositoryFactoryBean jobRepositoryFactoryBean = new JobRepositoryFactoryBean();
jobRepositoryFactoryBean.setDataSource(dataSource);
jobRepositoryFactoryBean.setTransactionManager(transactionManager);
jobRepositoryFactoryBean.setDatabaseType(DatabaseType.MYSQL.name());
return jobRepositoryFactoryBean.getObject();
* 作业调度器
* @param dataSource
* @param transactionManager
* @return
* @throws Exception
public SimpleJobLauncher jobLauncher(DataSource dataSource, PlatformTransactionManager transactionManager) throws Exception{
SimpleJobLauncher jobLauncher = new SimpleJobLauncher();
jobLauncher.setJobRepository(this.jobRepository(dataSource, transactionManager));
return jobLauncher;
@Bean
public Job importJob(JobBuilderFactory jobs, Step step){
return jobs.get("importJob")
.incrementer(new RunIdIncrementer())
.flow(step)
.end()
.build();
@Bean
public Step personStep(StepBuilderFactory stepBuilderFactory,
ItemReader<Person> reader, ItemWriter<Person> writer, ItemProcessor<Person, Person> processor){
return stepBuilderFactory.get("personStep")
.<Person, Person>chunk(5000)
.reader(reader)
.processor(processor)
.writer(writer)
.build();
@Bean
public MyJobListener myJobListener(){
return new MyJobListener();
Job监听
若需要监听Job的执行情况,则定义一个类实现JobExecutionListener,并在定义Job的Bean上绑定该监听器.
* @Title: 监听Job
* @Description:
* @author wangxuezheng
* @date 2017年2月10日 下午2:19:12
* @version V1.0
public class MyJobListener implements JobExecutionListener{
@Override
public void beforeJob(JobExecution jobExecution) {
@Override
public void afterJob(JobExecution jobExecution) {
@Bean
public MyJobListener myJobListener(){
return new MyJobListener();
Spring Batch为我们提供了大量的ItemReader的实现,用来读取不同的数据来源。
数据处理及校验
数据处理和校验都要通过ItemProcessor接口实现来完成。
(1) 数据处理
数据处理只需实现 ItemProcessor 接口,重写其 process方法。方法输入的参数是从ItemReader读取到的数据,返回的数据给ItemWriter。
public class MyItemProcessor implements ItemProcessor<Person, Person>{
@Override
public Person process(Person person) throws Exception {
String name = person.getName().toUpperCase();
person.setName(name);
return person;
(2) 数据校验
我们可以使用JSR-303(主要实现有hibernate-validator)的注解,来校验ItemReader读取到的数据是否满足要求,ItemProcessor实现ValidationItemProcessor接口。
public class MyItemProcessor extends ValidatingItemProcessor<Person> implements ItemProcessor<Person, Person>{
@Override
public Person process(Person item) {
super.process(item);
return null;
定义校验器,实现来自于Spring的Validator接口,使用JSR-303的Validator来校验:
Spring Batch 为我们提供了大量的ItemWriter的实现,用来将数据输出到不同的目的地。
Spring Batch的任务是通过JobLauncher的run方法来执行的,因此我们只需在普通的计划任务方法中执行JobLauncher的run方法即可。
配置类使用@EnableScheduling开启计划任务支持
@Service
public class ScheduledTaskService {
@Autowired
JobLauncher jobLauncher;
@Autowired
Job importJob;
public JobParameters jobParameters;
@Scheduled(fixedRate = 5000)
public void execute() throws Exception{
jobParameters = new JobParametersBuilder().addLong("time", System.currentTimeMillis()).toJobParameters();
jobLauncher.run(importJob, jobParameters);
Spring Boot的支持
SpringBoot对Spring Batch支持的源码位于org.springframework.boot.autoconfigure.batch下,SpringBoot提供了如下属性来定制SpringBatch:
spring.batch.job.names = job1,job2 #启动时要执行的Job,默认执行全部Job
spring.batch.job.enabled=true #是否自动执行定义的Job,默认是
spring.batch.initializer.enabled=true #是否初始化Spring Batch的数据库,默认为是
spring.batch.schema=
spring.batch.table-prefix= #设置SpringBatch的数据库表的前缀
spring batch 是 spring 家族里的批处理框架,其主要功能是 “读-处理-写”。
spring 官网是这样描述 batch 的:
一个轻量级、综合的批处理框架,用来开发企业系统中至关重要的批处理应用程序。
spring batch 提供了处理大容量数据记录必不可少的可重用方法,包括 日志/跟踪、事务管理、作业处理信息统计、作业重启、跳过和资源管理。它还提
什么是 Spring Batch
Spring Batch 作为 Spring 的子项目,是一款基于 Spring 的企业批处理框架。通过它可以构建出健壮的企业批处理应用。Spring Batch 不仅提供了统一的读写接口、丰富的任务处理方式、灵活的事务管理及并发处理,同时还支持日志、监控、任务重启与跳过等特性,大大简化了批处理应用开发,将开发人员从复杂的任务配置管理过程中解放出来,使他们可以更多地去关注核心的业务处理过程。
更多的介绍可以参考官网:https://spring.io/projects/
在Spring Boot项目中,可以通过注解定义Batch作业。@Configuration @EnableBatchProcessing // 启用Spring Batch功能 public class BatchConfig {// 用于创建Job @Autowired private StepBuilderFactory stepBuilderFactory;// 用于创建Step @Bean public Job myJob() {
结合Spring Boot的强大自动化配置和快速启动能力,我们可以轻松构建出高效、稳定且易于维护的批处理应用。本文将详细介绍如何在Spring Boot项目中集成Spring Batch,并通过一个具体示例展示如何实现批处理任务。
点击关注公众号,Java干货及时送达国内最强微服务框架,没有之一!几乎覆盖 Spring Boot 所有操作!2023全新 Java面试题(2500+)来源:blog.csdn.net/qq_35387940/article/details/108193473前言概念词就不多说了,我简单地介绍下 , spring batch 是一个 方便使用的 较健全的 批处理 框架。为什么说是方便使用...
先用一个图让你有一个大概印象,这个东西是什么JobRepository是用户注册Job的容器,就是存储数据的地方,可以看做是一个数据库的接口,在任务执行的时候需要通过它来记录任务状态等等信息。JobLauncher是任务启动器,通过它来启动任务,可以看做是程序的入口。Job代表着一个具体的任务。Step代表着一个具体的步骤,一个Job可以包含多个Step(想象把大象放进冰箱这个任务需要多少个步骤你就明白了)。Item就是输出->处理->输出,一个完整Step流程。...
Spring Boot Starter Batch 是基于 Spring Batch 构建的批处理应用程序的开发套件,它为开发者提供了一种简化和便捷的方式来处理大规模数据处理任务。批处理应用程序通常涉及大量数据的读取、处理和写入,而 Spring Batch 提供了强大的功能和组件来管理和执行这些任务。
概念词就不多说了,我简单地介绍下 ,spring batch 是一个 方便使用的 较健全的 批处理 框架。
为什么说是方便使用的,因为这是 基于spring的一个框架,接入简单、易理解、流程分明。
为什么说是较健全的, 因为它提供了往常我们在对大批量数据进行处理时需要考虑到的 日志跟踪、事务粒度调配、可控执行、失败机制、重试机制、数据读写等。
Spring Boot是一个用于创建独立的、基于Spring的应用程序的框架,它简化了Spring应用程序的配置和部署。Spring Batch是Spring框架的一个模块,用于批处理作业的开发。Spring Batch提供了许多功能,包括读取/写入数据、处理异常、事务管理等。在Spring Boot中集成Spring Batch可以帮助我们更方便地开发和部署批处理作业。依赖管理:使用Spring Boot可以自动管理项目的依赖关系,包括Spring Batch和其他相关的库。
从项目初始化、配置Spring Batch、实现ItemReader、ItemProcessor和ItemWriter,到配置Job和Step,Spring Batch提供了一系列强大的工具和框架,帮助开发者高效地实现批处理任务。Spring Batch是Spring框架的一部分,专为批处理任务设计,提供了简化的配置和强大的功能。在完成配置后,可以运行应用程序,并检查控制台输出和数据库中的数据,确保批处理任务正常运行。在基本的批处理任务基础上,可以进一步扩展功能,使其更加完善和实用。
自动,复杂地处理大量信息,无需用户交互即可最有效地进行处理。这些操作通常包括基于时间的事件(例如月末计算,通知或通信)。
定期应用非常大的数据集(例如,保险利益确定或费率调整)重复处理复杂的业务规则。
从内部和外部系统接收的信息的集成,通常需要格式化,验证和以事务方式进行的处理到记录系统中。批处理每天用于为企业处理数十亿笔事务
Spring Batch介绍
核心流程图如下:
Spring Batch 是一个轻量级的,全