我正在开发一个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标志,但是引发了相同的问题
谢谢!