Spring Batch MultiResourceItemWriter-如果最后一个文件的第一个块失败,则作业重启失败(文件不可写)

时间:2018-09-28 12:40:27

标签: spring csv spring-batch batch-processing

我正在开发一个Spring Batch应用程序,该程序将数据库行写入CSV文件中。数据库很大,所以我需要生成多个分区的输出CSV文件(outputfile.csv.1,outputfile.csv.2,outputfile.csv.3 .....)

我正在测试所有数据情况,在这种情况下重新启动失败的作业时发现了一个问题。当在新分区文件的第一块中执行失败时,将不会创建该新文件(我尝试了shouldDeleteIfEmpty = false,但未创建该文件)。

当我尝试重新启动时,似乎正在等待该最后丢失的分区失败文件。

示例:

ChunkSize = 50

ItemCountLimitPerResource = 100

第325条的强制例外

----------------

执行失败,我可以在输出中看到生成的文件(outputfile.csv.1,outputfile.csv.2,outputfile.csv.3),其中有前300行(6个块和3个完整的文件)。 / p>

重新启动作业时,出现异常:

org.springframework.batch.item.ItemStreamException:文件不可写:[XXXX ... \ outputfile * .csv.4 *]

似乎期望使用此文件( .csv.4 ),但由于第一个块中的错误而未创建(我尝试了shouldDeleteIfEmpty = false,但未创建文件)

查看数据库存储库我可以检查执行情况,资源索引的值为4

{“地图”:[{“条目”:[

{“ string”:“ FlatFileItemWriter.current.count”,“ long”:700} ,{“ string”:“ JdbcCursorItemReader.read.count”,“ int”:300},*

{“ string”:“ MultiResourceItemWriter.resource.index”,“ int”:4} ,*

{“ string”:“ FlatFileItemWriter.writing”,“ long”:50} ,{“ string”:[“ batch.taskletType”,“ org.springframework.batch.core.step.item.ChunkOrientedTasklet”]},{“ string”:“ MultiResourceItemWriter.resource.item.count”,“ int”: 0},{“ string”:[“ batch.stepType”,“ org.springframework.batch.core.step.tasklet.TaskletStep”]}]}]}}

我尝试用不同的值(AppendAllowed,ShouldDeleteIfEmpty,ShouldDeleteIfExists)配置FlatFileItemWriter标志,但是引发了相同的问题

谢谢!

0 个答案:

没有答案