乐途乐途
主页
  • 计算机基础

    • TCP/IP
    • Linux
    • HTTP
  • 数据库

    • SQL
    • MySQL 5.7
  • 编程语言

    • C
    • C++
    • Java SE
    • Python2
    • Python3
  • 数据格式

    • JSON
    • XML
  • 认证与安全

    • JWT
  • 工具

    • Markdown
  • Git

    • GitFlow
  • Quartz

    • Quartz
  • Java

    • Maven 入门
    • Maven 进阶
    • MyBatis
    • Spring
    • Spring MVC
  • Java

    • Spring Boot
    • Spring Cloud
    • Spring Cloud Alibaba
    • Spring Security
    • Spring AI
    • Spring Batch
    • Kafka
    • Java 设计模式
  • 缓存

    • Redis
  • 搜索引擎

    • Elasticsearch
  • 分布式协调

    • ZooKeeper
联系
阿里云
主页
  • 计算机基础

    • TCP/IP
    • Linux
    • HTTP
  • 数据库

    • SQL
    • MySQL 5.7
  • 编程语言

    • C
    • C++
    • Java SE
    • Python2
    • Python3
  • 数据格式

    • JSON
    • XML
  • 认证与安全

    • JWT
  • 工具

    • Markdown
  • Git

    • GitFlow
  • Quartz

    • Quartz
  • Java

    • Maven 入门
    • Maven 进阶
    • MyBatis
    • Spring
    • Spring MVC
  • Java

    • Spring Boot
    • Spring Cloud
    • Spring Cloud Alibaba
    • Spring Security
    • Spring AI
    • Spring Batch
    • Kafka
    • Java 设计模式
  • 缓存

    • Redis
  • 搜索引擎

    • Elasticsearch
  • 分布式协调

    • ZooKeeper
联系
阿里云
  • 学习路径
  • 第1章 批处理概述与 Spring Batch 核心理念

    • Spring Batch 概述
    • Job-Instance-Execution 三层生命周期
    • 三层架构
    • Chunk 处理模型
    • Tasklet 处理模型
  • 第2章 Job与作业配置

    • Job 详解
    • Job 配置
    • JobLauncher 详解
    • JobParameters 详解
    • JobRepository 详解
  • 第3章 Step与执行模型

    • Step 详解
    • Step 配置
    • ExecutionContext 详解
    • ItemStream 与状态管理
    • StepScope 与 JobScope
  • 第4章 ItemReader数据读取

    • ItemReader 详解
    • FlatFileItemReader 详解
    • JdbcItemReader 详解
    • MultiResourceItemReader 详解
  • 第5章 ItemProcessor 数据处理

    • ItemProcessor 详解
  • 第6章 ItemWriter 数据写出

    • ItemWriter 详解
    • FlatFileItemWriter 详解
    • CompositeItemWriter 详解
    • JdbcBatchItemWriter 详解
  • 第7章 Chunk 处理与事务边界

    • Chunk 处理模型详解
    • 事务边界
  • 第8章 作业参数与启动

    • 命令行与 Web 启动
  • 第9章 监听器与拦截器

    • 监听器详解
  • 第10章 重启重试与跳过策略

    • 重启与重试
    • 跳过策略
  • 第11章 作业流与条件决策

    • 作业流与条件决策
  • 第12章 分区与并行处理

    • 分区详解
    • 并行 Step 与 Split
  • 第13章 与 Spring Boot 集成实践

    • Spring Boot 集成
  • 第15章 运维与监控

    • 大作业设计模式
    • 运维与监控

Spring Boot 集成

本章定位:掌握 Spring Boot 与 Spring Batch 的集成——自动配置、开箱即用组件和常见生产配置。

定义与作用

Spring Boot 提供了 spring-boot-starter-batch 起步依赖,自动配置 JobRepository、JobLauncher、DataSource 等批处理基础设施,无需手动定义这些 Bean。

小崔的体感:

"添加 @EnableBatchProcessing 一行注解,JobRepository、JobLauncher、JobExplorer、PlatformTransactionManager 全部自动装配。剩下就是写你的 Job 和 Step。"

核心原理

关键自动配置

Bean来源默认行为
JobRepositoryDataSource 自动配置JdbcJobRepository 存入主数据源
JobLauncherSimpleJobLauncher同步启动
JobExplorer基于 JobRepository查询历史执行记录
PlatformTransactionManagerDataSource 自动配置JDBC 事务管理器
JobRegistryMapJobRegistry自动注册 @Bean Job
JobOperatorSimpleJobOperator命令行工具集成

完整示例

场景一:最小化 Spring Boot 批处理应用

@SpringBootApplication
@EnableBatchProcessing
public class MinimalBatchApplication {

    public static void main(String[] args) {
        SpringApplication.run(MinimalBatchApplication.class, args);
    }

    @Bean
    public Job helloWorldJob(JobRepository jobRepository, Step helloStep) {
        return new JobBuilder("helloWorldJob", jobRepository)
                .start(helloStep)
                .build();
    }

    @Bean
    public Step helloStep(JobRepository jobRepository,
                           PlatformTransactionManager tx) {
        return new StepBuilder("helloStep", jobRepository)
                .tasklet((contribution, chunkContext) -> {
                    System.out.println("Hello, Spring Batch!");
                    return RepeatStatus.FINISHED;
                }, tx)
                .build();
    }
}

场景二:生产级配置

# application.properties

# Job 元数据表前缀
spring.batch.jdbc.table-prefix=BATCH_

# 禁止启动时自动运行
spring.batch.job.enabled=false

# 初始化元数据表
spring.batch.jdbc.initialize-schema=always

# 数据源
spring.datasource.url=jdbc:mysql://localhost:3306/feixiang_batch
spring.datasource.username=batch_user
spring.datasource.password=${BATCH_DB_PASSWORD}
@Configuration
public class AsyncBatchConfig {

    @Bean
    public JobLauncher asyncJobLauncher(JobRepository jobRepository) {
        SimpleJobLauncher launcher = new SimpleJobLauncher();
        launcher.setJobRepository(jobRepository);

        ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
        executor.setCorePoolSize(2);
        executor.setMaxPoolSize(4);
        executor.setThreadNamePrefix("batch-launcher-");
        executor.initialize();

        launcher.setTaskExecutor(executor);
        return launcher;
    }
}

易错场景与避坑

反例一:依赖 H2 但生产环境是 MySQL

<!-- ❌ 只加了 starter-batch,没加 MySQL 驱动 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-batch</artifactId>
</dependency>
<!-- 忘记:mysql-connector-j -->

后果:生产启动失败——Spring Boot 自动尝试初始化 H2 内存表但连的是 MySQL。

反例二:spring.batch.job.enabled=true + @Scheduled

# ❌ 应用启动 + 定时任务 → Job 执行两次(启动时一次 + 定时一次)
spring.batch.job.enabled=true

面试高频考点

Q1:Spring Boot 的 @EnableBatchProcessing 自动配置了哪些 Bean?

JobRepository(JDBC)、JobLauncher(同步 SimpleJobLauncher)、JobExplorer、PlatformTransactionManager、JobRegistry、JobOperator。这些 Bean 全部基于应用中已配置的 DataSource。

Q2:如何实现 Web 异步启动?

定义第二个 JobLauncher Bean(注入 ThreadPoolTaskExecutor),在 Controller 中注入该异步 Launcher。同步 Launcher 仍由 Spring Boot 自动配置(用于命令行和测试),异步 Launcher 用于 Web 请求。


上一章:分区详解下一章:运维与监控