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
我在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 readerjava -jar myjob.jar file=myfile.csv
:这将使用文件 reader