1. 引言
在上一篇文章中,我们介绍了 Spring Batch 的核心概念,包括 Job、Step、Chunk、ItemReader、ItemProcessor 和 ItemWriter 等。本文将通过一个简单的示例,带你从零开始构建一个 Spring Batch 作业,体验其基本功能。你将学习如何:
- 配置 Spring Boot 和 Spring Batch 环境。
- 实现从 CSV 文件读取数据、处理数据并写入数据库的完整流程。
- 定义 Job 和 Step。
- 运行并验证作业结果。
示例场景
我们将实现一个 ETL(Extract-Transform-Load)任务:
- 输入:一个包含商品信息的 CSV 文件(字段:商品 ID、名称、价格)。
- 处理:将价格统一转换为美元(假设输入为人民币,乘以汇率 0.14),并过滤掉价格低于 0 的记录。
- 输出:将处理后的商品数据写入数据库的
product
表。
2. 准备工作
2.1 技术栈
- Spring Boot:简化项目配置和依赖管理。
- Spring Batch:提供批处理功能。
- H2 数据库:嵌入式数据库,便于测试(生产环境可替换为 MySQL、PostgreSQL 等)。
- Maven:依赖管理工具。
2.2 项目依赖
创建一个 Spring Boot 项目,添加以下依赖(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 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.example</groupId><artifactId>spring-batch-demo</artifactId><version>0.0.1-SNAPSHOT</version><name>spring-batch-demo</name><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.2.5</version><relativePath/></parent><dependencies><!-- Spring Boot Starter Batch --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-batch</artifactId></dependency><!-- H2 数据库 --><dependency><groupId>com.h2database</groupId><artifactId>h2</artifactId><scope>runtime</scope></dependency><!-- Spring Boot Starter Data JPA --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId></dependency><!-- Lombok(可选,简化实体类代码) --><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot