春季批处理元数据问题

时间:2018-07-26 07:33:33

标签: spring spring-batch metadata

当我尝试使用选项spring.batch.initialize-schema=never禁用Spring Batch元数据创建,然后启动批处理时,没有任何反应,并且该批处理在不运行相关作业的情况下立即终止。 另一方面,当我尝试启用元数据创建时,该批处理工作正常,我遇到了经典的SERIALIZED_CONTEXT字段大小错误。 执行批处理时,我不能总是在表中保存4GB的数据。 如何确定禁用元数据创建,并使我的批处理仍在工作?

编辑:我想我找到了一种避免此问题的解决方案,并且我想提出您的观点。 我终于开始使用元数据生成。当您在Tasklets之间传递的ExecutionContext中存储了大量数据时,就会发生此问题(我们都知道这是原因)。在我的情况下,它是元素ArrayList(POJO),使用CSVOpenCSV文件中检索。为了克服这个问题,我有:

  • 减少了ArrayList中的列和行数(因为Spring Batch将在ArrayList字段中将此SERIALIZED_CONTEXT序列化。列和行越多,您拥有的越多您一定会遇到此问题)
  • SERIALIZED_CONTEXT的类型从TEXT更改为LONGTEXT
  • 删除了POJO中定义的toString()方法(不确定是否真的有帮助)

但是我仍然想知道,如果您别无选择并且必须加载所有列,那么防止此问题的最佳方法是什么?

1 个答案:

答案 0 :(得分:0)

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

  

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

您仍然可以加载所有列,但是必须减小块大小。 Spring Batch中块处理的全部目的是不将所有数据加载到内存中。在这种情况下,您可以做的是仔细选择适合您要求的块大小。没有选择正确块大小的方法(因为它取决于列数,每列的大小等),因此您需要以经验方式进行。