如何在ItemProcessor中启动Spring批处理步骤

oknwwptz  于 2023-02-12  发布在  Spring
关注(0)|答案(1)|浏览(136)

下面是我的设想:
a1.从表A读取记录a2.逐个处理这些记录,并为每个记录生成新的临时表B b1.从表B读取记录,处理这些记录数据并将其保存在文件中a3.将表A中的记录标记为完成状态
描述此场景的伪代码:

foreach item in items:
    1. select large amount data where id=item.id then save the result to temp table_id
    2. process all records in table_id then write then to a file
    3. update item status
    4. send message to client

这是我的设计
1.创建Spring批处理作业,将日期设置为参数
1.创建步骤1以从表A读取记录
1.创建步骤2以从临时表B读取记录,并在步骤1的处理器中启动它
我查看了Spring Batch文档,我没有找到任何关于如何将一个步骤嵌套到一个步骤的处理器中的相关介绍。似乎步骤是Spring Batch中的最小单位,它不能被拆分。

    • 更新**

下面是我解决这个问题的伪代码:(我使用Spring Boot2.7.8)

def Job:
  PagingItemReader(id) :
    select date from temp_id
  FlatFileItemWriter:

application implement commandlinerunner:
  items = TableAReposiroy.SelectAllBetweenDate
  for item : items:
    Service.createTempTableBWithId(item.id)
    Service.loadDataToTempTable(item.id)

    job = createJob(item.id)
    luancher.run(job)
    
    update item status
wdebmtf2

wdebmtf21#

步骤是作业的一部分。不能从项目处理器中启动步骤。
你需要把你的需求分解成不同的步骤,而不是试图把步骤“嵌套”到其他步骤中。在你的情况下,你可以做如下的事情:
1.创建Spring批处理作业,将日期设置为参数
1.创建步骤1以从表A读取记录并生成新的临时表B
1.创建步骤2,从临时表B读取记录,处理这些记录数据并将其保存在文件中,并将表A中的记录标记为完成状态
步骤2的编写器将是复合编写器:它将数据写入文件,并更新表A中已处理记录的状态。这样,如果写入文件时出现问题,表A中记录的状态将回滚(实际上,由于写入操作失败,它们未得到正确处理,在这种情况下,需要重新处理它们)。

相关问题