Spring batch Spring批处理根据读取的行动态更改块大小

Spring batch Spring批处理根据读取的行动态更改块大小,spring-batch,Spring Batch,我需要根据读取的行数动态更改块大小,之所以需要这样做,是因为每个文件都代表一个事务,如果一行没有正确插入数据库,我需要回滚该文件中所有行的数据库?如何动态更改块大小?我发现了这一点,但没有多大帮助如果您的作业输入是单个文件,则应该可以这样做。这是你的选择吗?如果是,则可以创建第一个tasklet步骤来计算文件中的行数,并传递信息以动态配置第二个面向块的步骤来读/写文件。如果文件包含一个大的数据集怎么办?对于整个文件,您将有一个事务处理。。你考虑过这种情况吗?一种常见的技术是使用暂存表验证内容,然

我需要根据读取的行数动态更改块大小,之所以需要这样做,是因为每个文件都代表一个事务,如果一行没有正确插入数据库,我需要回滚该文件中所有行的数据库?如何动态更改块大小?我发现了这一点,但没有多大帮助

如果您的作业输入是单个文件,则应该可以这样做。这是你的选择吗?如果是,则可以创建第一个tasklet步骤来计算文件中的行数,并传递信息以动态配置第二个面向块的步骤来读/写文件。如果文件包含一个大的数据集怎么办?对于整个文件,您将有一个事务处理。。你考虑过这种情况吗?一种常见的技术是使用暂存表验证内容,然后将数据从暂存表复制到生产表。@MahmoudBenHassine我考虑过一个大数据集,这就是为什么我需要动态设置块大小,因为我的数据集有x个记录,每个记录长度都不固定。如果每条记录都有一个固定的长度设置,那么固定的块大小将很简单,因为每条记录都不是固定的,有趣的是,最好的解决方案是扩展SimpleCompletionPolicy并定义应该被视为完整的内容跟踪处理过的记录以设置块大小。我认为定制的
CompletionPolicy
不会解决您的问题。我的意思是,如果您的输入文件中有1M条记录,您是否可以对1M条记录进行一次事务处理?如果您对此没有意见,那么您可以让第一步计算文件中的行数,并将块大小传递给执行上下文中的第二步。否则,您可以使用一个暂存表,在该表中验证一切正常,如果是,则将其复制到生产表中。