Java Spring批处理:CompositeItemWriter的回滚

Java Spring批处理:CompositeItemWriter的回滚,java,spring,spring-batch,Java,Spring,Spring Batch,我是SpringBatch新手,目前正在使用MultiResourceItemReader读取多个文件,并使用CompositeItemWriter将其写入数据库的不同表中,每个文件包含不同数量的行。 我的问题:若一行未能插入到数据库中,是否可以回滚该文件中插入的所有行? 有没有办法进行回滚?Spring批处理以块的形式读取和写入数据。假设您有1000条记录,块大小为100,并且您正在执行批插入。对于每个区块(100项),spring批处理将打开一个事务,插入100条记录并提交该事务。在这种情况

我是SpringBatch新手,目前正在使用MultiResourceItemReader读取多个文件,并使用CompositeItemWriter将其写入数据库的不同表中,每个文件包含不同数量的行。 我的问题:若一行未能插入到数据库中,是否可以回滚该文件中插入的所有行?
有没有办法进行回滚?

Spring批处理以块的形式读取和写入数据。假设您有1000条记录,块大小为100,并且您正在执行批插入。对于每个区块(100项),spring批处理将打开一个事务,插入100条记录并提交该事务。在这种情况下,若发生任何错误,那个么特定块(100条记录)将回滚。但是不能回滚之前插入的所有块

谢谢你的清楚解释。但是如果一个事务没有固定数量的项,例如第一个文件有100个项,第二个文件有104个项,块大小应该是104?或者区块大小可能取决于文件中的行数吗?不,区块大小可以是任何东西。如果您有104个条目,ItemReader将读取100个条目,并将100个条目发送给ItemWriter。ItemWriter应该批量插入/更新数据库。在下一个chuck中,只有4个项目将被写入器读取和插入。在下一个区块中,ItemReader将在到达文件末尾后返回null。因此,工作将被终止。