每个作业都有生命周期。Spring Batch 允许在生命周期的不同阶段通过提供的钩子( Hook )来添加额外的逻辑。
JobExecutionListener
接口提供了两个回调方法:beforeJob()
和 afterJob()
。
创建 Spring Batch 监听器有两种方式:
每个作业都有生命周期。Spring Batch 允许在生命周期的不同阶段通过提供的钩子( Hook )来添加额外的逻辑。
JobExecutionListener
接口提供了两个回调方法:beforeJob()
和 afterJob()
。
创建 Spring Batch 监听器有两种方式:
批处理过程在本质上是有状态的。
JobExecution
表示的是 Job 的一次尝试运行,作业的状态在 ExecutionContext
(执行上下文)中维护。
每个 JobExecution
有一个对应的 ExecutionContext
。每个 JobExecution
可能对应多个 StepExecution
,而每个 StepExecution
也各有一个对应的 ExecutionContext
。
在 Spring Batch 中,一个 JobInstance 只能成功运行一次,它根据作业名和识别性参数的哈希值来标记任务的唯一性。
启动时命令后面带上参数:foo=bar (如果通过命令行启动,直接在 jar 文件的后面跟上 key=value
结构的参数就行了,IDEA 中可以在运行配置里设置参数)。
Spring Batch 需要存储数据以记录 Job 运行的参数、步骤等信息,这里以 MySQL 为例(需要添加 mysql-connector-j 依赖)。
完整的 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>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.5</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>me.liujiajia.batch</groupId>
<artifactId>chapter04</artifactId>
<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-batch</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jdbc</artifactId>
</dependency>
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.batch</groupId>
<artifactId>spring-batch-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
通过 Spring Initializr 创建 Spring Batch 项目,添加如下依赖: