【问题标题】:How to limit size in spring batch while using ItemWriter step?使用 ItemWriter 步骤时如何限制 Spring Batch 的大小?
【发布时间】:2020-01-08 04:08:47
【问题描述】:

我已使用 Spring Batch 从数据库中成功读取项目。

现在我必须将它写入一个 xml 文件,但这里有一个 catch xml 文件大小,如果它不能超过 100mb,那么内容应该写入另一个文件。

有什么方法可以在配置写入器步骤时限制文件大小,或者我必须实现自定义写入器。有什么建议吗?

【问题讨论】:

    标签: java xml spring spring-batch


    【解决方案1】:

    我不相信有办法使用 Spring Batch 来做到这一点。

    您应该实施的解决方案取决于文件大小为 100mb 的要求。

    这是系统基础架构要求吗?还是对文件接收系统的要求?

    您有 3 个选项:

    1. 如您所述,可以创建自定义编写器,用于在文件达到此最大大小时拆分文件。这很讨厌,因为您基本上必须编写一个全新的编写器,然后必须由您维护,并且实际实现也不会很好(必须写入文件,检查大小,然后如果超过 100mb然后再次从文件中删除)。

    2. 猜测文件大小的块大小。这只是猜测 1 条记录的大小为 1mb(示例),因此每个文件最多只能有 100 条记录。这是一个相当冒险的解决方案,因为它不能保证文件的大小小于 100mb,但我相信这可以使用标准的 Spring Batch 来实现。

    3. 在写入大文件后创建一个额外的步骤来拆分文件。这是我的首选解决方案。这是您创建一个包含所有内容的大型“临时”文件(例如 450mb)。然后你有一个辅助过程(步骤),将这个文件分成 5 个单独的文件(4x100mb,1x50mb)。这也可以在 spring 批处理中完成,如果需要,也可以在同一个批处理作业中完成

    【讨论】:

      【解决方案2】:

      开箱即用的最接近的是MultiResourceItemWriter。此项目编写器将根据项目编号创建多个输出文件:每当写入的项目数量超过给定限制时,它将创建一个新文件。因此,如果您可以估计要写入的最大项目数而不超过每个文件 100MB,那么此编写器可以提供帮助。

      否则,您将需要编写基于输出文件大小而不是项目编号的自定义多资源项目编写器。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-07-15
        • 1970-01-01
        • 2019-12-11
        • 1970-01-01
        • 1970-01-01
        • 2014-04-26
        • 1970-01-01
        • 2018-06-20
        相关资源
        最近更新 更多