Spring 批量动态 reader

Spring batch dynamic reader

我在Spring批处理中有一个要求,文件名将通过参数作为输入传递,如果文件存在,我们需要以 1000 个块为单位读取文件,或者如果文件名未传递然后需要连接到 oracle 数据库并从特定的 table

中读取所有记录

我已经阅读了文档,但不确定如何实现它

注意:文件将只包含 id,丰富将在处理器中完成

有人可以建议或提供一些关于如何实现上述功能的示例代码

您可以编写自己的 org.springframework.batch.item.support.AbstractItemCountingItemStreamItemReader 实现并检查文件是否存在,并取决于结果 return a Jdbc reader 或文件 reader

您可以根据作业参数定义 reader 和 return 所需类型的步骤:

@Bean
@StepScope
public ItemStreamReader<Person> itemReader(@Value("#{jobParameters['file']}") String file) {
    if (file != null) {
        //return a FlatFileItemReader<Person> configured with the `file` parameter
    } else {
        // return a JdbcCursorItemReader<Person> or a JdbcPagingItemReader<Person>
    }
}

有了它,您可以运行您的工作:

  • java -jar myjob.jar:这将使用 jdbc reader
  • java -jar myjob.jar file=myfile.csv:这将使用文件 reader