用途:在使用 Spring Boot 3.x 搭载的 Spring Batch 5 构建批处理作业、ETL 管道、定时导入导出等面向块的批量处理时使用。核心变化:不要添加 @EnableBatchProcessing,Boot 会自动配置 JobRepository、JobLauncher 和事务管理器;JobBuilderFactory 与 StepBuilderFactory 已移除,改用 new JobBuilder(name, jobRepository) 和 new StepBuilder(name, jobRepository),且 .chunk(500, txManager) 必须传事务管理器。
主要能力与要点:
- 幂等与重启:同一标识参数重复运行会抛 JobInstanceAlreadyCompleteException,可用 RunIdIncrementer 或唯一标识参数解决;失败作业用相同参数重启会从最后提交的块续跑。
- 读取器:分页读取器必须对唯一列 ORDER BY,否则静默丢行或重复;JdbcCursorItemReader 非线程安全,多线程步骤改用分页读取器或 SynchronizedItemStreamReader;读取 jobParameters 需 @StepScope。
- 处理器:返回 null 表示过滤该条,不是错误。
- 写入器:Batch 5 签名为 write(Chunk<? extends T> chunk);SQL 写入优先 JdbcBatchItemWriter;不要在写入器里发邮件或发消息,应放到 afterJob 监听器。
- 启动:Web 应用设 spring.batch.job.enabled=false 并显式启动;默认 JobLauncher 同步阻塞。
- 元数据表:生产环境用 initialize-schema: never,配合 Flyway 迁移管理 BATCH_* 表。
限制:小型一次性异步任务用 @Async 或 @Scheduled 更轻量;需要重试的持久后台作业更适合队列。具体版本细节与完整示例需参考原文。