springbatch定义
Spring Batch是一种轻量级、全面的批处理框架,旨在支持开发健壮的批处理日常企业级系统。
spring batch特性
Spring batch实现的特性包括数据验证、格式化输出、可重用、基于组块的处理、事务管理、声明式IO、基于Web的管理界面、可重启/重试。
Spring batch提供了处理大量记录的必不可少的高可用功能,包括日志追踪、事务管理、定时任务处理统计、定时任务重启、跳过,以及资源管理。它也提供了一些更高级的技术服务和特性,通过优化和分区技术使这些服务和特性可支持更高体量和性能的批处理工作。无论是简单的还是复杂的大容量批处理作业,都可以以高度可伸缩的方式利用该框架来处理大量信息。
springbatch架构有三层:应用层、核心层、基础设施层
基于springboot3+springbatch5的新特性
springboot3+springbatch5的主要如下新特性
- java17
- 主要依赖关系升级
- 批处理基础架构配置升级
- 批处理测试配置升级
- 定时任务参数处理升级
- 执行上下文序列化更新
- 系统命令任务片升级
- 新特性
- 去除特性
java17
和springboot3的jdk版本一样,最少java17。
主要依赖升级
springbatch5的主要依赖升级这些:
- spring 6
- spring intergration 6
- spring data 3
- spring aqmp 3
- spring for apache kafka 3
- micrometer 1.10
环境迁移有
jakarta ee 9
hibernate 6
批处理基础架构配置升级
maven依赖
<parent>
<artifactId>spring-boot-starter-parent</artifactId>
<groupId>org.springframework.boot</groupId>
<version>3.1.0</version>
</parent>
<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-batch</artifactId>
</dependency>
</dependencies>
概述
在早期,Spring Batch提供了基于映射的作业存储库和作业浏览器实现使用内存中的作业存储库。这些实现在版本4中已弃用并在版本5中完全删除。建议使用基于jdbc的替换使用嵌入式数据库(如H2、HSQL等)实现。
在spring batch 5中,注解@EnableBatchProcessing配置一个基于jdbc的JobRepository,此配置是需要DataSource和PlatformTransactionManager两个spring bean。DataSource可依赖于外部数据库和引用嵌入式数据库来存储内存中的作业存储库。
java配置类新版
@Configuration
@EnableBatchProcessing
public class BatchConfig {
@Autowired
private JobRepository jobRepository;
@Autowired
private PlatformTransactionManager platformTransactionManager;
@Bean
public Step step1() {
return new StepBuilder("step1", jobRepository)
.tasklet((contribution, chunkContext) -> {
System.out.println(">>>>>>>>>>>>>>>>>>> hello world");
return RepeatStatus.FINISHED;
}, platformTransactionManager
).build();
@Bean
public Job helloJob(){
return new JobBuilder( "helloJob", jobRepository)
.build();
}
}
或者使用如下的
@Slf4j
@Configuration
public class BatchConfig extends DefaultBatchConfiguration {
@Bean
public Step step1(JobRepository jobRepository) {
return new StepBuilder("step1", jobRepository)
.tasklet((contribution, chunkContext) -> {
System.out.println(">>>>>>>>>>>>>>>>>>> hello world");
return RepeatStatus.FINISHED;
}, getTransactionManager()
).build();
}
@Bean
public Job helloJob(JobRepository jobRepository, Step step1){
return new JobBuilder( "helloJob", jobRepository)
.start(step1)
.build();
}
}
删除参数
Spring Batch 5 还删除了对 SQLFire、JSR-352(Java 平台的批处理应用)和 GemFire 的支持。
批处理参数升级
这个版本增加了对使用任何类型作为作业参数的支持,而不只是像v4中那样的4个预定义类型(long、double、字符串、日期)。此更改会影响作业参数在数据库中的保存方式(每个预定义类型不再有4个不同的列)。请检查BATCH_JOB_EXECUTION_PARAMS中的列更改以获取DDL更改。参数类型的完全限定名现在作为字符串以及参数值持久化。字符串文字可以通过标准的Spring转换服务转换为参数类型。标准转换服务可以丰富任何必需的转换器,以将用户特定的类型转换为字符串文字。