Spring批处理元数据问题

Spring批处理元数据问题,spring,spring-batch,metadata,Spring,Spring Batch,Metadata,当我尝试使用选项Spring.Batch.initializeschema=never禁用Spring批元数据创建,然后启动批处理时,不会发生任何情况,批处理会立即终止,而不会运行相关作业。 另一方面,当我尝试启用元数据创建时,批处理工作正常,我得到的是经典的序列化的\u上下文字段大小错误。当我执行批处理时,我不能总是在表中保存4GB的数据。 如何最终禁用元数据创建,并使我的批处理仍在工作 编辑:我想我找到了一种解决方案来避免这个问题,我想听听你的观点。我终于开始进行元数据生成了。当在taskl

当我尝试使用选项
Spring.Batch.initializeschema=never
禁用Spring批元数据创建,然后启动批处理时,不会发生任何情况,批处理会立即终止,而不会运行相关作业。 另一方面,当我尝试启用元数据创建时,批处理工作正常,我得到的是经典的
序列化的\u上下文
字段大小错误。当我执行批处理时,我不能总是在表中保存4GB的数据。 如何最终禁用元数据创建,并使我的批处理仍在工作

编辑:我想我找到了一种解决方案来避免这个问题,我想听听你的观点。我终于开始进行元数据生成了。当在
tasklet
之间传递的ExecutionContext中存储了大量数据时,就会出现问题(我们都知道这就是原因)。在我的例子中,它是元素的
ArrayList
(POJO),使用
OpenCSV
CSV
文件中检索。为了克服这个问题,我有:

  • 减少了
    ArrayList
    中的列数和行数(因为
    Spring Batch
    将在
    SERIALIZED_CONTEXT
    字段中序列化此
    ArrayList
    。列数和行数越多,就越有可能出现此问题)
  • 序列化的\u上下文的类型从
    文本更改为
    长文本
  • 删除了POJO中定义的
    toString()
    方法(不确定它是否真的有用)

但是我仍然想知道,如果你没有选择,不得不加载所有列,那么防止这个问题的最佳方法是什么?

因此,这不是元数据生成的问题,而是在两个步骤之间传递大量数据的问题

如果您别无选择,必须加载所有列,那么防止此问题的最佳方法是什么


您仍然可以加载所有列,但必须减小块大小。Spring批处理中块处理的全部要点是不要加载内存中的所有数据。在您的案例中,您可以做的是仔细选择适合您需求的块大小。没有办法选择正确的数据块大小(因为它取决于列数、每列大小等),因此您需要以经验的方式进行操作。

对于记录,以下内容可能会有所帮助: