以下是使用 Spring Boot 快速搭建 Spring Batch 项目的详细步骤和示例代码,后续章节提供的示例均在该项目的基础上进行构建和开发。
使用 Spring Initializr 或者使用 IDEA 提供的 Spring Initializr 进行创建,如下图:

具体如何创建,读者自行完成。项目创建成功后,结构如下图:

由于我们使用的是 maven 项目,因此需要在 pom.xml 中添加依赖。完整的 pom.xml 内容如下:
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.6.7</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.hxstrive.spring_batch</groupId> <artifactId>spring_batch_demo1</artifactId> <version>0.0.1-SNAPSHOT</version> <name>spring_batch_demo1</name> <description>Demo project for Spring Boot</description> <properties> <java.version>1.8</java.version> </properties> <dependencies> <!-- Spring Batch 的依赖 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-batch</artifactId> </dependency> <!-- 内存数据库 --> <dependency> <groupId>com.h2database</groupId> <artifactId>h2</artifactId> <scope>runtime</scope> </dependency> <!-- Spring Boot 测试相关依赖 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
下面将通过 @Configuration 配置类来对 Spring Batch 进行配置,代码如下:
package com.hxstrive.spring_batch.config;
import org.springframework.batch.core.*;
import org.springframework.batch.core.configuration.annotation.JobBuilderFactory;
import org.springframework.batch.core.configuration.annotation.StepBuilderFactory;
import org.springframework.batch.core.scope.context.ChunkContext;
import org.springframework.batch.core.step.tasklet.Tasklet;
import org.springframework.batch.repeat.RepeatStatus;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* Spring Batch 配置类
* @author hxstrive.com
*/
@Configuration
public class BatchConfig {
// 用于创建和配置 Job 对象的工厂类
@Autowired
private JobBuilderFactory jobBuilderFactory;
// 用于创建和配置 Step 对象的工厂类
@Autowired
private StepBuilderFactory stepBuilderFactory;
// 创建一个名为 helloJob 的任务
@Bean
public Job helloJob() {
return jobBuilderFactory.get("helloJob")
// 配置任务要执行的步骤
.start(helloStep())
.build();
}
// 创建一个名为 helloStep 的步骤
@Bean
public Step helloStep() {
return stepBuilderFactory.get("helloStep").tasklet(new Tasklet() {
@Override
public RepeatStatus execute(StepContribution stepContribution, ChunkContext chunkContext) throws Exception {
System.out.println("hello world");
return RepeatStatus.FINISHED; // 返回 FINISHED 表明任务执行结束
}
}).build();
}
}上述示例中,通过 Spring Ioc 自动注入 JobBuilderFactory 和 StepBuilderFactory,然后使用他们分别创建一个 Job 和一个 Step 步骤,然后使用 Job 的 start() 方法去执行步骤。
启动类上面添加 @EnableBatchProcessing 注解,用来开启批处理功能,如下图:
package com.hxstrive.spring_batch;
import org.springframework.batch.core.configuration.annotation.EnableBatchProcessing;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
* hello world,使用 h2 内存数据库保存状态信息
* @author hxstrive.com
*/
@SpringBootApplication
@EnableBatchProcessing // 开启批处理
public class SpringBatchDemoApplication {
public static void main(String[] args) {
SpringApplication.run(SpringBatchDemoApplication.class, args);
}
}注意:@EnableBatchProcessing 是 Spring Batch 框架中的核心注解,用于在 Spring 应用中启用批处理功能。该注解通过 自动配置 的方式简化批处理作业的开发
直接运行当前 Spring Boot 项目,输出日志如下:
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v2.6.7)
2025-06-21 22:48:51.268 INFO 27944 --- [ main] c.h.s.SpringBatchDemoApplication : Starting SpringBatchDemoApplication using Java 17.0.12 on hxstrive with PID 27944 (E:\work_demo\demo_springbatch4\spring_batch_demo1\target\classes started by hxstr in E:\work_demo)
2025-06-21 22:48:51.270 INFO 27944 --- [ main] c.h.s.SpringBatchDemoApplication : No active profile set, falling back to 1 default profile: "default"
2025-06-21 22:48:51.695 INFO 27944 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting...
2025-06-21 22:48:51.794 INFO 27944 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Start completed.
2025-06-21 22:48:51.867 INFO 27944 --- [ main] o.s.b.c.r.s.JobRepositoryFactoryBean : No database type set, using meta data indicating: H2
2025-06-21 22:48:51.957 INFO 27944 --- [ main] o.s.b.c.l.support.SimpleJobLauncher : No TaskExecutor has been set, defaulting to synchronous executor.
2025-06-21 22:48:52.010 INFO 27944 --- [ main] c.h.s.SpringBatchDemoApplication : Started SpringBatchDemoApplication in 0.981 seconds (JVM running for 1.652)
2025-06-21 22:48:52.012 INFO 27944 --- [ main] o.s.b.a.b.JobLauncherApplicationRunner : Running default command line with: []
2025-06-21 22:48:52.044 INFO 27944 --- [ main] o.s.b.c.l.support.SimpleJobLauncher : Job: [SimpleJob: [name=helloJob]] launched with the following parameters: [{}]
2025-06-21 22:48:52.065 INFO 27944 --- [ main] o.s.batch.core.job.SimpleStepHandler : Executing step: [helloStep]
hello world
2025-06-21 22:48:52.073 INFO 27944 --- [ main] o.s.batch.core.step.AbstractStep : Step: [helloStep] executed in 7ms
2025-06-21 22:48:52.076 INFO 27944 --- [ main] o.s.b.c.l.support.SimpleJobLauncher : Job: [SimpleJob: [name=helloJob]] completed with the following parameters: [{}] and the following status: [COMPLETED] in 20ms
2025-06-21 22:48:52.080 INFO 27944 --- [ionShutdownHook] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Shutdown initiated...
2025-06-21 22:48:52.082 INFO 27944 --- [ionShutdownHook] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Shutdown completed.其中关键信息:
(1)启动一个名为 helloJob 的 Job,没有携带任何参数:
2025-06-21 22:48:52.044 INFO 27944 --- [ main] o.s.b.c.l.support.SimpleJobLauncher : Job: [SimpleJob: [name=helloJob]] launched with the following parameters: [{}](2)执行 helloStep 步骤,并且输出“hello world”字符串,以及该步骤执行耗时 7ms:
2025-06-21 22:48:52.065 INFO 27944 --- [ main] o.s.batch.core.job.SimpleStepHandler : Executing step: [helloStep] hello world 2025-06-21 22:48:52.073 INFO 27944 --- [ main] o.s.batch.core.step.AbstractStep : Step: [helloStep] executed in 7ms
(3)名为 helloJob 的 Job 执行完成,耗时 20ms,没有携带任何参数,状态为 COMPLETED:
2025-06-21 22:48:52.076 INFO 27944 --- [ main] o.s.b.c.l.support.SimpleJobLauncher : Job: [SimpleJob: [name=helloJob]] completed with the following parameters: [{}] and the following status: [COMPLETED] in 20ms如果你能走到这里,说明第一个 Spring Batch 运行成功了,关于更多知识继续阅读后续章节……