Spring Boot 基于 convention over configuration 的原则,即约定优于配置的原则。提供了一个很方便的创建 Spring 应用的工具和框架。步骤如下:
1 打开网址
在浏览器搜索框中搜:start.spring.io,打开后会看到如下界面,一个能够帮助我们创建 SpringBoot 的 Maven 项目。
- Project:可以选择 Maven Project,Gradle Project 中的一个,在这里我选择的是 Maven Project
- Language:选择 Java
- Spring Boot:选择 2.1.10 版本
- Project Metadata:
- Group:com.batch
- Artifact:demo
- Dependencies:搜索 Spring Batch,然后选中他。
配置完成之后如下所示:
完成上的配置之后,点击 “Generate -Ctrl…” ,然后会自动帮助我们下载一个 Maven Project 压缩包,解压后导入到 IntelliJ IDEA 中 。
2 创建一个简单的 Job
-
创建一个 configuration 包 config;
-
List item
-
在 config 包下创建 JobConfiguration 类,在类上标注 “@Configuration”、“@EnableBatchProcessing”,有了这两个注解,我们可以配置与 Job 相关的信息;
-
使用 @Autowired 注解来注入我们所需要的依赖:JobBuilderFactory、StepBuilderFactory;
-
目录结构如下
在 JobConfiguration 类中 创建一个了一个 helloWorldJob() 和一个 step1() 方法。为了节省篇幅,我省略了导包部分的代码,代码如下: -
JobConfiguration.java
package com.batch.config;
@Configuration
@EnableBatchProcessing
public class JobConfiguration {
private SimpleDateFormat format = new SimpleDateFormat("yyy-MM-dd HH:mm:ss");
@Autowired
private JobBuilderFactory jobBuilderFactory;
@Autowired
private StepBuilderFactory stepBuilderFactory;
@Bean
public Job demoJob() {
return jobBuilderFactory.get("job: " + format.format(new Date()))
.start(demoStep())
.build();
}
@Bean
public Step demoStep() {
return stepBuilderFactory.get("step: " + format.format(new Date()))
.tasklet(new Tasklet() {
@Override
public RepeatStatus execute(
StepContribution stepContribution,
ChunkContext chunkContext) throws Exception {
System.out.println("Hello Spring Batch.");
return RepeatStatus.FINISHED;
}
}).build();
}
}
注意:避免运行出错,再次运行时,都要修改 Job 和 Step 的名称,所以在创建 Job 和 Step 时都在其名称的后面都加上了:format.format(new Date()) 。因为 Spring Batch 的每一次运行, Job 和 Step 的状态都会被记录。
- demoJob():需要返回一个 Job 对象,通过 jobBuilderFactory 工厂去创建一个 Job,给 Job 取个名字,即 get() 方法里面得参数。有了 Job 之后,通过 start() 方法去就可以启动 demoStep()。
- demoStep():同样的,需要 stepBuilderFactory 去创建 step ,该 step 取名为 get() 中的参数, tasklet() 就是 demoStep 所作的一个任务。但 step 可重复,如果step失败了,下次可能再运行,为了避免这种情况,所以 return 的时候返回一个 RepeatStatus.FINISHED
- 运行程序
程序运行的时候,报错了。这是因为 Spring Batch 需要一个持久化的内容,即数据库。例如,需要数据库去保存 Job,Step 运行的状态信息。在此之前,我们没有配置任何数据,因而程序运行时,它尝试去找内存数据库或嵌入式数据库,没有找到,所以报错。 - 配置 Spring 的 H2 数据库
在 pom 文件中添加 h2 数据库依赖
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>1.4.200</version>
</dependency>
- 再次运行程序,控制台的结果如下
对上面的数字意义进行详细的解释:
“1” 表示启动的应用程序是FirstJobApplication,在机器 HSDS190913X 上运行,进程 PID 为 7212;
“2” 没有设置数据库类型,使用的是内置的数据库 H2;
“3” 程序运行用时为 2.827s
“4” Job 是一个 SimpleJob,启动的 Job 名称为 name=job: 2019-11-22 19:53:30执行的 Step,Step的名称为:[step: 2019-11-22 19:53:30];
“5” 在控制台打印的信息为:Hello Spring Batch.
“6” Job 运行的状态为:completed