Spring batch Spring批处理中的完成策略
由于一些复杂的逻辑,我有定制的spring读写器,在reader类中,我必须从DB中读取数据,然后writer将数据写入writer中的excel文件。 在实现这一点时,我需要将记录分块读取并将其传递给编写器,我正在使用“MyCompletionPloice”java类扩展SimpleCompletionPolicy,并在构造函数中传递super(1),但问题是,它只读取一行并将其写入excel工作表,并且进入了一个永无止境的过程(循环运行reder-->写入器-->读取器-->等)。 有人能告诉我同样的情况吗?请找到示例代码 作业配置-Spring batch Spring批处理中的完成策略,spring-batch,Spring Batch,由于一些复杂的逻辑,我有定制的spring读写器,在reader类中,我必须从DB中读取数据,然后writer将数据写入writer中的excel文件。 在实现这一点时,我需要将记录分块读取并将其传递给编写器,我正在使用“MyCompletionPloice”java类扩展SimpleCompletionPolicy,并在构造函数中传递super(1),但问题是,它只读取一行并将其写入excel工作表,并且进入了一个永无止境的过程(循环运行reder-->写入器-->读取器-->等)。 有人能告
batch:job id="DailyJob">
<batch:step id="DailyJobStep1" next="DailyJobStep2">
<batch:tasklet>
<batch:chunk reader="DailyJobCSVFileItemReader" writer="DailyJobCSVFileCustomWriter"
chunk-completion-policy="MyCompletionPloicy" />
<batch:listeners>
<batch:listener ref="DailyJobListener" />
</batch:listeners>
</batch:tasklet>
</batch:step>
批处理:作业id=“DailyJob”>
读者班-
public class DailyJobCSVFileItemReader implements
ItemReader<CSVFileDailyJobBean> {
@Override
public CSVFileDailyJobBean read() throws Exception,
UnexpectedInputException, ParseException,
NonTransientResourceException {
CSVFileDailyJobBean csvFileDailyJobBean = new CSVFileDailyJobBean()
// some logic
return csvFileDailyJobBean;
}}
公共类DailyJobCSVFileItemReader实现
项目阅读器{
@凌驾
public CSVFileDailyJobBean read()引发异常,
UnexpectedInputException,ParseException,
非TransientResourceException{
CSVFileDailyJobBean CSVFileDailyJobBean=新的CSVFileDailyJobBean()
//一些逻辑
返回csvFileDailyJobBean;
}}
您的读卡器实现需要返回null,以通知spring批处理它为空
read方法定义了ItemReader最基本的契约;
调用它将返回一个项,如果没有其他项,则返回null
请参见您的读卡器实现需要返回null,以通知spring批处理它为空 read方法定义了ItemReader最基本的契约; 调用它将返回一个项,如果没有其他项,则返回null
当我使用SimpleCompletionPolicy并传递super(1)时,请参见每次从写入程序返回到读取程序时,它都会给出相同的行。它会得到相同的结果,但无法增加计数。但是,当我们使用spring提供的读取器并传递提交间隔时,它会增加值并获得下一组结果。因此,我希望使用完成策略实现相同的结果。请添加您的自定义代码问题的completionPolicy您在完成策略中是否有自定义代码的示例。我的意思是,在您的问题中包括您的“我正在使用”MyCompletionPloice“java类,该类扩展了SimpleCompletionPolicy”,因此,当我使用SimpleCompletionPolicy并传递super(1)时,我们可以查看代码每次从写入程序返回到读取程序时,它都会给出相同的行。它会得到相同的结果,但无法增加计数。但是,当我们使用spring提供的读取器并传递提交间隔时,它会增加值并获得下一组结果。因此,我希望使用完成策略实现相同的结果。请添加您的自定义代码问题的completionPolicy您在完成策略中是否有自定义代码的示例。我的意思是,您在问题中包括您的“我正在使用”MyCompletionPlocity“java类,它扩展了SimpleCompletionPolicy”,以便我们可以查看代码