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批处理中块处理的全部要点是不要加载内存中的所有数据。在您的案例中,您可以做的是仔细选择适合您需求的块大小。没有办法选择正确的数据块大小(因为它取决于列数、每列大小等),因此您需要以经验的方式进行操作。对于记录,以下内容可能会有所帮助: