6.2 ItemWriter

ItemWriter 在功能上类似于 ItemReader,但属于相反的操作。 资源仍然需要定位,打开和关闭, 区别就在于在于ItemWriter 执行的是写入操作(write out), 而不是读取。 在使用数据库或队列的情况下,写入操作对应的是插入(insert),更新(update),或发送(send)。 序列化输出的格式依赖于每个批处理作业自己的定义。

ItemReader 接口类似, ItemWriter 也是个相当通用的接口:

  1. public interface ItemWriter<T> {
  2. void write(List<? extends T> items) throws Exception;
  3. }

类比于ItemReader中的readwrite 方法是ItemWriter 接口的根本方法; 只要传入的 items 列表是打开的,那么它就会尝试着将其写入(write out)。 因为一般来说, items 将要被批量写入到一起,然后再输出, 所以write 方法接受一个List 参数,而不是单个对象(item)。 list 被输出后, 在write 方法返回(return)之前, 对缓冲执行刷出(flush)操作是很必要的。 例如, 如果使用 Hibernate DAO 时, 对每个对象要调用一次DAO写操作, 操作完成之后, 方法 return 之前, writer 就应该关闭 hibernate 的 Session会话。