Spring Batch 5.X升级:配置适配疑问与工厂类替换咨询
问题解决方案
1. 替换移除的DefaultBatchConfigurer自定义JobRepository
Spring Batch 5移除了DefaultBatchConfigurer,自定义JobRepository可以通过直接声明JobRepository类型的Bean实现,示例代码如下:
@Configuration @EnableBatchProcessing public class DefaultBatchConfig { @Bean public JobRepository jobRepository(DataSource dataSource, PlatformTransactionManager transactionManager) throws Exception { JobRepositoryFactoryBean factory = new JobRepositoryFactoryBean(); factory.setDataSource(dataSource); factory.setTransactionManager(transactionManager); factory.setDatabaseType(DatabaseType.MYSQL.name()); // 根据你的数据库类型调整 factory.setTablePrefix("BATCH_"); // 可选,自定义表前缀 return factory.getObject(); } }
如果需要更精细的配置(比如自定义序列化、隔离级别等),直接在JobRepositoryFactoryBean上调用对应的setter方法即可。
2. 替换废弃的JobBuilderFactory和StepBuilderFactory
Spring Batch 5中这两个工厂类已被废弃,直接使用JobBuilder和StepBuilder构建作业和步骤即可,无需依赖工厂类。
原有废弃写法示例
@Autowired private JobBuilderFactory jobBuilderFactory; @Autowired private StepBuilderFactory stepBuilderFactory; @Bean public Job activateTestJob() { return jobBuilderFactory.get("activateTestJob") .start(activateTestStep()) .build(); } @Bean public Step activateTestStep() { return stepBuilderFactory.get("activateTestStep") .<Input, Output>chunk(10) .reader(reader()) .processor(processor()) .writer(writer()) .build(); }
升级后的写法示例
@Autowired private JobRepository jobRepository; @Autowired private PlatformTransactionManager transactionManager; @Bean public Job activateTestJob() { return new JobBuilder("activateTestJob", jobRepository) .start(activateTestStep()) .build(); } @Bean public Step activateTestStep() { return new StepBuilder("activateTestStep", jobRepository) .<Input, Output>chunk(10, transactionManager) .reader(reader()) .processor(processor()) .writer(writer()) .build(); }
核心变化:
- 直接实例化
JobBuilder,传入作业名称和JobRepository - 实例化
StepBuilder时,传入步骤名称、JobRepository,构建chunk时传入PlatformTransactionManager
原工厂类支持的监听、重试、跳过等配置项,都可以在新的构建器上找到对应方法实现。
内容的提问来源于stack exchange,提问作者Bhagyashree Kalshetti
相关产品推荐
相关产品推荐

