持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第28天,点击查看活动详情
在了解了Step 之后,还有一点需要说明,Step 并不是Spring Batch 执行的最小单元,在Step 内,还有tasklet 的概念,在tasklet 中包含reader / processor / writer 的概念。关系结构如图:
下面我们来介绍一下这三个概念。
什么是ItemReader
ItemReader 本身是一个接口,它是一个为Step 提供数据的用来读数据的抽象。在ItemReader 读完所有数据之后,它会返回null,代表数据已经读取完毕。在Spring Batch 中,有很多ItemReader 的实现类,如:JdbcPagingItemReader,JdbcCursorItemReader。
由于有很多已经实现ItemReader 接口的实现类,所以在Spring Batch 中可以做到很多实际的“拿来就用”的操作。同时,ItemReader 支持的可以读入的数据源也十分丰富,比如说各种类型的数据库,文件,数据流。我们日常开发涉及到的很多场景几乎都支持。
什么是ItemWriter
通过名字我们就可以看出来,对比与ItemReader,ItemWriter 就是一个为Step 提供写数据功能的抽象。对于ItemWirter 来说,它的写的单位是可以进行配置的。我们可以选择一次只写一条数据,也可以选择一次写多条数据。ItemWriter 的职责很清晰,它的工作就是“写数据”,对于读入的数据是不能有任何操作动作的。
当然,Spring Batch 同时也为ItemWriter 提供了很多有用的实现类,我们也可以实现ItemWriter 接口,来完成自定义的写数据的需求。
什么是ItemProcessor
同样,通过名字和前面两个接口的对比,ItemProcessor 的工作内容就是用来“处理数据”。它是对我们的业务逻辑处理的抽象,处于ItemReader 和ItemWriter 之间,在ItemReader 读取数据之后,经过ItemProcessor 的处理,然后转到ItemWriter 去写数据。当我们在ItemProcessor 步骤操作的时候,发现这条数据并不是我们需要的,认为这条数是不应该被写入的,ItemProcessor 是可以通过返回null 来通知系统的。
总结
这篇文章主要介绍的是ItemReader/ItemProcessor/ItemWriter 三者的概念及主要作用,通过这三个接口的实现类,我们可以完成对数据的读入,加工处理以及写操作。