如何做国外网站彩票的推广,慈溪企业网站seo,怎么样再自己的网站做二级域名,赣州网站建设机构文章目录 0.前言1.参考文档2.基础介绍2.1. 核心组件 3.步骤3.1. 引入依赖3.2. 配置文件3.3. 核心源码 4.示例项目5.总结 0.前言 背景#xff1a; 一直零散的使用着Spring Boot 的各种组件和特性#xff0c;从未系统性的学习和总结#xff0c;本次借着这个机会搞一波。共同学… 文章目录 0.前言1.参考文档2.基础介绍2.1. 核心组件 3.步骤3.1. 引入依赖3.2. 配置文件3.3. 核心源码 4.示例项目5.总结 0.前言 背景 一直零散的使用着Spring Boot 的各种组件和特性从未系统性的学习和总结本次借着这个机会搞一波。共同学习一起进步。哈哈 Spring Boot Starter Batch 是基于 Spring Batch 构建的批处理应用程序的开发套件它为开发者提供了一种简化和便捷的方式来处理大规模数据处理任务。批处理应用程序通常涉及大量数据的读取、处理和写入而 Spring Batch 提供了强大的功能和组件来管理和执行这些任务。
本文将带你深入探索 Spring Boot Starter Batch 的核心源码和机制 将介绍作业配置类的创建和使用以定义作业结构和配置步骤、读取器、处理器、写入器等组件。
你还将了解到作业监听器和步骤监听器的用法以及如何处理错误和异常情况。通过深入研究 Spring Batch 的核心组件你将对作业执行器、作业存储库和事务管理器有更深入的了解。 无论你是菜鸟还是大牛都可以看看指点一番。让我们一起开始这个令人兴奋的探索之旅吧 1.参考文档 《SpringBoot集成Spring Batch批处理框架入门案例实战》https://blog.51cto.com/u_15891990/5908727 以下是一些参考文档可以帮助你更深入地了解 Spring Boot Starter Batch 的使用和内部机制 Spring Boot 官方文档提供了关于 Spring Boot Starter Batch 的详细介绍和使用方法。 可以了解如何使用 Spring Boot Starter Batch 来简化批处理应用程序的开发和部署并深入了解自动配置和属性的使用。 官方文档链接https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#howto-batch-applications
2.基础介绍
Spring Boot Starter for Batchspring-boot-starter-batch是一个用于在 Spring Boot 项目中实现批处理任务的启动器。它是基于 Spring Batch 框架构建的通过自动配置功能简化了批处理作业的配置和依赖项管理。
Spring Batch 是一个功能强大的开源批处理框架旨在处理大规模数据处理和批量任务。它提供了读取、处理和写入大量数据的机制并支持事务管理、错误处理、跳过策略等功能。
使用 Spring Boot Starter for Batch 可以带来以下好处
简化配置Spring Boot Starter for Batch 利用 Spring Boot 的自动配置机制减少了繁琐的配置步骤使批处理任务的配置更加简单和直观。依赖管理启动器自动管理 Spring Batch 和其他相关依赖项的版本兼容性避免了手动解决依赖冲突的问题。快速启动通过使用启动器你可以快速搭建和启动一个批处理任务无需手动配置各种依赖项和组件。集成监控Spring Boot Starter for Batch 与 Spring Boot Actuator 集成提供了监控和管理批处理作业的端点方便对作业进行跟踪和管理。
要使用 Spring Boot Starter for Batch你只需在项目的构建文件中添加相应的依赖项然后配置作业和步骤的读取器、处理器和写入器组件。启动器将自动加载所需的配置和组件并提供简洁的编程模型来实现批处理任务。
2.1. 核心组件
当构建批处理作业时Spring Batch 提供了以下核心组件每个组件都有特定的功能和责任通过配置和定义它们的行为可以实现具体的批处理逻辑 Job作业Job 是批处理的最高级别组件表示一个完整的批处理作业。它由一个或多个步骤Step组成。Job 可以包含作业参数、监听器、错误处理策略等。 Step步骤Step 是批处理作业的基本处理单元表示一个独立的处理步骤。每个步骤可以包含一个 ItemReader、一个 ItemProcessor 和一个 ItemWriter。步骤可以定义事务管理、错误处理、跳过策略等。 ItemReader读取器ItemReader 用于读取输入数据。它提供了不同的实现方式如从文件、数据库、消息队列等读取数据。ItemReader 从源数据中逐条读取数据并将其传递给 ItemProcessor 进行处理。 ItemProcessor处理器ItemProcessor 用于处理输入数据。它接收从 ItemReader 读取的数据并进行自定义的业务逻辑处理如数据转换、过滤、验证等。ItemProcessor 可以对输入数据进行任意的处理操作并返回处理后的数据。 ItemWriter写入器ItemWriter 用于写入处理后的数据。它将 ItemProcessor 处理后的数据写入目标位置如文件、数据库等。ItemWriter 提供了不同的实现方式以适应不同的输出场景。
这些组件通过配置和组合形成了一个完整的批处理作业。可以使用 Spring Batch 提供的注解和构建器来定义这些组件并将它们组装成一个作业流程。例如可以创建一个 Job它包含一个或多个 Step每个 Step 包含一个 ItemReader、一个 ItemProcessor 和一个 ItemWriter。通过定义这些组件的行为和属性可以实现从输入数据读取、处理、写入输出数据的批处理逻辑。
此外Spring Batch 还提供了其他辅助组件如监听器Listeners、错误处理Error Handling、事务管理Transaction Management等用于监控和管理批处理作业的执行过程和异常情况。这些组件可以通过配置和扩展来实现特定的需求和处理逻辑。
3.步骤
3.1. 引入依赖 dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-batch/artifactId/dependency3.2. 配置文件
可以通过配置文件来自定义和配置批处理作业的行为。常用的配置属性
# 指定要运行的作业的名称
spring.batch.job.namesjob1,job2# 是否启用 Spring Batch 的作业
spring.batch.job.enabledtrue# 是否在启动时初始化 Spring Batch 的数据库模式
spring.batch.initialize-schemafalse# 指定 Spring Batch 的数据库模式Schema名称
spring.batch.schemaclasspath:org/springframework/batch/core/schema-*.sql# 指定 Spring Batch 数据库表的前缀
spring.batch.table-prefixBATCH_# 配置数据源
spring.datasource.urljdbc:mysql://localhost:3306/batchdb
spring.datasource.usernameroot
spring.datasource.passwordsecret# 配置数据源连接池
spring.datasource.hikari.maximum-pool-size10# 配置事务管理器
spring.batch.transaction.manager-bean-namemyTransactionManager# 配置作业监听器
spring.batch.job.job-listenersmyJobListener# 配置步骤监听器
spring.batch.step.step-listenersmyStepListener# 配置错误处理策略
spring.batch.job.error-handlersskipExceptionHandler# 配置作业参数
spring.batch.job.parameters.param1value1
spring.batch.job.parameters.param2value23.3. 核心源码
Spring Boot Starter Batch 是基于 Spring Batch 构建的批处理应用程序的开发套件它简化了批处理作业的配置和部署。通过自动配置和注解扫描Spring Boot Starter Batch 提供了简化和便捷的方式来开发和配置批处理应用程序。它集成了 Spring Batch 的核心功能并提供了默认的配置使得开发者可以更专注于业务逻辑的实现。 自动配置Spring Boot Starter Batch 提供了自动配置类 BatchAutoConfiguration它在应用程序启动时自动配置 Spring Batch 相关的组件和属性。它会根据配置文件中的属性来初始化和配置批处理作业的运行环境。 注解扫描自动配置类使用 EnableBatchProcessing 注解来启用批处理功能并自动扫描作业和步骤的配置类。 JobRepository自动配置类会创建一个 JobRepository 实例用于管理作业的元数据和状态。它使用 Spring Batch 提供的默认实现 JobRepositoryFactoryBean并根据配置文件中的属性进行配置。 事务管理自动配置类会创建一个 PlatformTransactionManager 实例用于管理批处理作业的事务。它使用 Spring Batch 提供的默认实现 DataSourceTransactionManager并使用配置文件中的数据源进行配置。 作业执行器自动配置类会创建一个 JobLauncher 实例用于启动和执行批处理作业。它使用 Spring Batch 提供的默认实现 SimpleJobLauncher并使用配置文件中的作业存储库和事务管理器进行配置。 在Spring Boot 3.x版本中SimpleJobLauncher 已经废弃。 需要使用 TaskExecutorJobLauncher. 作业监听器自动配置类会自动注册配置类中定义的作业监听器JobListener以便在作业执行的不同阶段触发相应的事件。 步骤监听器自动配置类会自动注册配置类中定义的步骤监听器StepListener以便在步骤执行的不同阶段触发相应的事件。 作业配置类开发者可以创建作业配置类来定义批处理作业的结构和行为。作业配置类使用 Configuration 注解标记并使用 EnableBatchProcessing 注解启用批处理功能。在作业配置类中可以定义一个或多个批处理作业并配置它们的步骤、读取器、处理器、写入器等组件。 作业执行通过调用 JobLauncher 的 run() 方法并传入作业名称和作业参数可以启动和执行批处理作业。JobLauncher 会根据作业配置类中的定义按照步骤的顺序执行作业的各个阶段并将数据从读取器传递给处理器和写入器。
4.示例项目
从一个包含学生成绩的 CSV 文件中读取数据并根据一定的条件进行处理和分析。我们简化一下实际业务肯定比较复杂我们为了演示简化一个版本方便大家理解。实现一个批处理任务从 students.csv 文件中读取学生数据将分数乘以 10 进行处理并将处理后的学生数据写入到日志中。
创建一个名为 Student 的类
Data
public class Student {private String name;private int score;
}StudentItemReader 的类实现 Spring Batch 的 ItemReader 接口用于从 CSV 文件中读取学生数据。
import org.springframework.batch.item.ItemReader;
import org.springframework.batch.item.file.FlatFileItemReader;
import org.springframework.batch.item.file.mapping.BeanWrapperFieldSetMapper;
import org.springframework.batch.item.file.mapping.DefaultLineMapper;
import org.springframework.batch.item.file.transform.DelimitedLineTokenizer;
import org.springframework.core.io.ClassPathResource;public class StudentItemReader implements ItemReaderStudent {private FlatFileItemReaderStudent reader;public StudentItemReader() {reader new FlatFileItemReader();reader.setResource(new ClassPathResource(students.csv));DelimitedLineTokenizer tokenizer new DelimitedLineTokenizer();tokenizer.setNames(name, score);BeanWrapperFieldSetMapperStudent fieldSetMapper new BeanWrapperFieldSetMapper();fieldSetMapper.setTargetType(Student.class);DefaultLineMapperStudent lineMapper new DefaultLineMapper();lineMapper.setLineTokenizer(tokenizer);lineMapper.setFieldSetMapper(fieldSetMapper);reader.setLineMapper(lineMapper);}Overridepublic Student read() throws Exception {return reader.read();}
}创建一个名为 StudentItemProcessor 的类实现 Spring Batch 的 ItemProcessor 接口用于处理学生数据。
import org.springframework.batch.item.ItemProcessor;public class StudentItemProcessor implements ItemProcessorStudent, Student {Overridepublic Student process(Student student) throws Exception {// 在这里进行学生数据的处理和分析// 这里只是简单地将分数乘以 10student.setScore(student.getScore() * 10);return student;}
}创建一个名为 StudentItemWriter 的类实现 Spring Batch 的 ItemWriter 接口用于将处理后的学生数据写入到日志中。
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.batch.item.ItemWriter;public class StudentItemWriter implements ItemWriterStudent {private static final Logger LOGGER LoggerFactory.getLogger(StudentItemWriter.class);Overridepublic void write(List? extends Student items) throws Exception {for (Student student : items) {LOGGER.info(Processed student: {}, student);}}
}创建一个名为 BatchConfig 的配置类用于配置批处理作业的相关组件。
import org.springframework.batch.core.Job;
import org.springframework.batch.core.Step;
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.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;Configuration
EnableBatchProcessing
public class BatchConfig {Autowiredprivate JobBuilderFactory jobBuilderFactory;Autowiredprivate StepBuilderFactory stepBuilderFactory;// 创建 ItemReader读取输入数据Beanpublic ItemReaderStudent itemReader() {return new StudentItemReader();}// 创建 ItemProcessor处理输入数据Beanpublic ItemProcessorStudent, Student itemProcessor() {return new StudentItemProcessor();}// 创建 ItemWriter写入输出数据Beanpublic ItemWriterStudent itemWriter() {return new StudentItemWriter();}// 创建 Step定义处理步骤Beanpublic Step step(ItemReaderStudent reader, ItemProcessorStudent, Student processor,ItemWriterStudent writer) {return stepBuilderFactory.get(step).Student, Studentchunk(10).reader(reader).processor(processor).writer(writer).build();}// 创建 Job定义作业Beanpublic Job job(Step step) {return jobBuilderFactory.get(job).start(step).build();}
}创建一个名为 Application 的启动类用于启动 Spring Boot 应用和运行批处理作业。
import org.springframework.batch.core.Job;
import org.springframework.batch.corejava
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;SpringBootApplication
public class Application {public static void main(String[] args) {ConfigurableApplicationContext context SpringApplication.run(Application.class, args);// 获取 job beanJob job context.getBean(Job.class);try {// 启动批处理作业context.getBean(JobLauncher.class).run(job, new JobParameters());} catch (Exception e) {e.printStackTrace();} finally {context.close();}}
}创建一个名为 students.csv 的 CSV 文件包含学生的姓名和分数数据例如
姓名分数张三80小明75小花90大卫85艾玛92弗兰克78格蕾丝88海伦91伊万83爱迪生87
5.总结
使用 Spring Boot Starter Batch开发者可以更专注于业务逻辑的实现而不必过多关注底层的配置和管理细节。它提供了一种高效、可靠的方式来处理大规模数据处理任务为批处理应用程序的开发带来了便利和灵活性。 Spring Boot Starter Batch 是基于 Spring Batch 的开发套件为批处理应用程序提供了便捷的开发和配置方式。通过自动配置和注解扫描它简化了批处理作业的搭建和部署过程。
在 Spring Boot Starter Batch 的核心源码中关键的组件包括自动配置类、作业配置类、JobRepository、事务管理器、作业执行器等。自动配置类负责初始化和配置这些组件并根据配置文件中的属性进行设置。
开发者可以创建作业配置类通过定义作业结构和配置步骤、读取器、处理器、写入器等组件来定制批处理作业的行为。作业监听器和步骤监听器可以用来处理作业执行过程中的事件和异常情况。 大家好我是冰点今天的Spring Boot Starter Batch 全部内容就是这些。如果你有疑问或见解可以在评论区留言。