Spring 批处理 - 构造 2 reader 和 2 个具有单个写入器的处理器
Spring Batch - construct 2 reader and 2 processor with single writer
我的情况是我有一个批处理作业将从 2 个不同的 table 读取数据并进行不同的处理。
第一个 reader 将执行简单的 SQL 检索和简单的转换,第二个 reader 将执行 SQL 检索并处理后面的更新和插入逻辑。两个 readers 都会 return 一个字符串行并写入一个文件。
在 Spring 批处理中,可能在 1 个步骤中有 2 个 reader 和 2 个处理器,然后传递给 1 个编写器?
您可以编写自定义代码 reader 并在自定义处理器中编写应用程序级逻辑,以根据输入的内容处理输入。一步中有两个 reader 是没有意义的。 spring 批处理将如何执行它们?完成 reader 1 然后开始 reader 2 是没有意义的。这等同于有两个不同的步骤。
另一种方法是将 reader 的输出放在一个文件中,然后再执行另一个写入步骤。但我会选择第一种技术。
我会选择 Faiz Pinkman 建议的第二种方法。它更接近 spring-batch 的工作方式。
第一步
- reader 为您的简单 sql -> 使用标准数据库 reader
- 处理器 -> 您自己的简单逻辑实现
- 写入文件 -> 使用标准的 FlatFileItemWriter
第二步
我不明白你说的 "process update and insert logic behind" 到底是什么意思。我假设您从数据库读取数据并基于该数据,您必须在 table.
中执行插入和更新
- reader 对于更复杂的数据 -> 再次使用标准数据库 reader
- 处理器 ->
- 为文本文件准备字符串
- 准备新的插入和更新
- writer -> 使用具有以下委托的复合编写器
- 文本文件的 FlatFileItemWriter
- DbWriter 取决于您的插入和更新需求
这样,您就有了明确的事务边界,并且可以确定文件的内容以及插入和更新是 "in sync"。
注意:第一步和第二步可以运行并行
第三步
- reader 使用多资源 reader,从两个文件中读取
- 编写器使用 FlatFileItemWriter 将两个内容写入一个文件。
当然,如果你不需要一个文件中的内容,那么你可以跳过第3步。
您也可以依次执行步骤1和步骤2并写入同一个文件。但是根据步骤 1 和 2 的执行时间,性能可能不如并行执行步骤 1 和 2 并使用第三步来合并数据。
我的情况是我有一个批处理作业将从 2 个不同的 table 读取数据并进行不同的处理。
第一个 reader 将执行简单的 SQL 检索和简单的转换,第二个 reader 将执行 SQL 检索并处理后面的更新和插入逻辑。两个 readers 都会 return 一个字符串行并写入一个文件。
在 Spring 批处理中,可能在 1 个步骤中有 2 个 reader 和 2 个处理器,然后传递给 1 个编写器?
您可以编写自定义代码 reader 并在自定义处理器中编写应用程序级逻辑,以根据输入的内容处理输入。一步中有两个 reader 是没有意义的。 spring 批处理将如何执行它们?完成 reader 1 然后开始 reader 2 是没有意义的。这等同于有两个不同的步骤。
另一种方法是将 reader 的输出放在一个文件中,然后再执行另一个写入步骤。但我会选择第一种技术。
我会选择 Faiz Pinkman 建议的第二种方法。它更接近 spring-batch 的工作方式。
第一步
- reader 为您的简单 sql -> 使用标准数据库 reader
- 处理器 -> 您自己的简单逻辑实现
- 写入文件 -> 使用标准的 FlatFileItemWriter
第二步
我不明白你说的 "process update and insert logic behind" 到底是什么意思。我假设您从数据库读取数据并基于该数据,您必须在 table.
中执行插入和更新- reader 对于更复杂的数据 -> 再次使用标准数据库 reader
- 处理器 ->
- 为文本文件准备字符串
- 准备新的插入和更新
- writer -> 使用具有以下委托的复合编写器
- 文本文件的 FlatFileItemWriter
- DbWriter 取决于您的插入和更新需求
这样,您就有了明确的事务边界,并且可以确定文件的内容以及插入和更新是 "in sync"。
注意:第一步和第二步可以运行并行
第三步 - reader 使用多资源 reader,从两个文件中读取 - 编写器使用 FlatFileItemWriter 将两个内容写入一个文件。
当然,如果你不需要一个文件中的内容,那么你可以跳过第3步。
您也可以依次执行步骤1和步骤2并写入同一个文件。但是根据步骤 1 和 2 的执行时间,性能可能不如并行执行步骤 1 和 2 并使用第三步来合并数据。