本文主要记录从spring batch 4.0 升级到 spring batch 5.0需要的修改。更详细解释请官方参考https://github.com/spring-projects/spring-batch/wiki/Spring-Batch-5.0-Migration-Guide
-
依赖升级
Spring Batch 5 基于 Spring Framework 6,它需要 Java 17 作为最低版本。所有 EE API 的 import 语句从 javax.* 更新为 jakarta.*。
-
Job写法变化
在springbatch 4,@enablebatchprocessing会自动配置一个transaction manager进行事务管理。现因为会打扰到本身的事务,需要自己配置transaction manager在每个tasklet step。下面是来自官方的v4 和 v5的例子。
// Sample with v4
@Configuration
@EnableBatchProcessing
public class MyStepConfig {
@Autowired
private StepBuilderFactory stepBuilderFactory;
@Bean
public Step myStep() {
return this.stepBuilderFactory.get("myStep")
.tasklet(..) // or .chunk()
.build();
}
}
// Sample with v5
@Configuration
@EnableBatchProcessing
public class MyStepConfig {
@Bean
public Tasklet myTasklet() {
return new MyTasklet();
}
@Bean
public Step myStep(JobRepository jobRepository, Tasklet myTasklet, PlatformTransactionManager transactionManager) {
return new StepBuilder("myStep", jobRepository)
.tasklet(myTasklet, transactionManager) // or .chunk(chunkSize, transactionManager)
.build();
}
}
JobBuilderFactory 和 StepBuilderFactory在v5中也从上下文的context中去掉了,在新建step和job时需使用jobbuilder 和step builder。例子如下
// Sample with v4
@Configuration
@EnableBatchProcessing
public class MyJobConfig {
@Autowired
private JobBuilderFactory jobBuilderFactory;
@Bean
public Job myJob(Step step) {
return this.jobBuilderFactory.get("myJob")
.start(step)
.build();
}
}
// Sample with v5
@Configuration
@EnableBatchProcessing
public class MyJobConfig {
@Bean
public Job myJob(JobRepository jobRepository, Step step) {
return new JobBuilder("myJob", jobRepository)
.start(step)
.build();
}
}